1. JavaScript / Говнокод #18741

    +4

    1. 1
    2. 2
    3. 3
    4. 4
    /^.{0}$/.test('')   // true
    /^.{0,}$/.test('')  // true
    /^.{0,1}$/.test('') // true
    /^.{,1}$/.test('')  // false

    http://www.ecma-international.org/ecma-262/5.1/#sec-15.10

    /^.{,1}$/.test('.{,1}') // true

    Запостил: 1024--, 21 Сентября 2015

    Комментарии (24) RSS

    • Пропущенное число до запятой же значит 0?
      Ответить
      • {n} - Ровно n раз
        {m,n} - От m до n включительно
        {m,} Не менее m
        {,n} Не более n

        тебе еще и регулярки разжевывать надо?
        Ответить
        • >Не более n
          От 0 до n? И что я не так сказал, рванина?
          Ответить
          • >От 0 до n? И что я не так сказал, рванина?
            идиота кусок, {0,1} по хорошему хоть и работает как {,1}, но не эквивалентно, потому, что проверяется только максимум.
            Ответить
            • > {0,1} по хорошему хоть и работает как {,1}, но не эквивалентно, потому, что проверяется только максимум.
              > работает как {,1}, но не эквивалентно
              Какое-то запутанное утверждение. Можно пояснительный пример с регулярками и указанием языка/реализации?
              Ответить
              • >Какое-то запутанное утверждение. Можно пояснительный пример с регулярками и указанием языка/реализации?
                хотел найти что-то в спецификациях, и не нашел {,n}.
                в posix есть все кроме него.
                а вот тут PCRE - Perl-compatible regular expressions (original API)
                http://www.pcre.org/pcre.txt
                сказано следующее:
                An opening curly bracket that appears in a
                position where a quantifier is not allowed, or one that does not match
                the syntax of a quantifier, is taken as a literal character. For exam-
                ple, {,6} is not a quantifier, but a literal string of four characters.
                опа-опа-опа-па, оказывается в JavaScript все правильно.
                есть еще http://pubs.opengroup.org/onlinepubs/009696899/basedefs/xbd_chap09.html

                When an ERE matching a single character or an ERE enclosed in parentheses is followed by an interval expression of the format "{m}", "{m,}", or "{m,n}", together with that interval expression it shall match what repeated consecutive occurrences of the ERE would match. The values of m and n are decimal integers in the range 0 <= m<= n<= {RE_DUP_MAX}, where m specifies the exact or minimum number of occurrences and n specifies the maximum number of occurrences. The expression "{m}" matches exactly m occurrences of the preceding ERE, "{m,}" matches at least m occurrences, and "{m,n}" matches any number of occurrences between m and n, inclusive.

                For example, in the string "abababccccccd" the ERE "c{3}" is matched by characters seven to nine and the ERE "(ab){2,}" is matched by characters one to six.

                ну ладно, слив засчитан.
                Ответить
                • > pcre
                  > {,6}
                  Надеюсь какой-нибудь use warnings в перле намекнет про глупую ошибку
                  Ответить
                  • A-нет: http://ideone.com/wmGJNI
                    Ответить
                  • эмм... perl тут скорее как название.Perl Compatible Regular Expressions
                    это по сути стандарт описывающий синтаксис, который поддерживает больше конструкций чем POSIX. его по сути как модуль используют в том же самом php, или других языка.
                    так, что тут вопрос не к перлу, а к парсеру.
                    Ответить
            • Сладкого хлеба въебал?
              Ответить
      • В питоне значит 0. В экмаскрипте конструкция {,n} не существует и понимается буквально (строка "{,n}").
        Ответить
        • Ну охуеть, т.е. оно при ошибках синтаксиса еще и молча буквально воспринимает строку?
          Ответить
          • это не ошибки синтаксиса, см выше
            Ответить
            • {} - метапоследовательность. Воспринимать то что внутри как литерал - это как игнорировать недействительные эскейп-последовательности (причем бы тут питон?)
              Ответить
              • читай внимательно
                An opening curly bracket that appears in a position where a quantifier is not allowed, or one that does not match the syntax of a quantifier, is taken as a literal character. For example, {,6} is not a quantifier, but a literal string of four characters.
                взято отсюда http://www.pcre.org/pcre.txt
                казалось бы, при чем тут твой дружок? при чем тут Кук?
                Ответить
                • >Воспринимать то что внутри как литерал - это как игнорировать недействительные эскейп-последовательности
                  И? Я говорю, что это - говно. На недействительные последовательности лучше материться явно.

                  Какой мой дружок? Что несешь?
                  Ответить
                  • > На недействительные последовательности лучше материться явно.
                    Хоть я и сторонник свободы, undefined, слабого питуха, но плюсанул. В регулярках и так нечитаемости хватает, чтобы позволять такие вореции.
                    Ответить
                    • >Хоть я и сторонник свободы, undefined, слабого питуха
                      "сторонник слабого питуха" это звучит!

                      >вывод питушни
                      >утиная питузация
                      >питухбезопасность
                      >зависимые питухи
                      >базовые питухи должны иметь возможность использовать подпитушню, не зная об этом.
                      Ответить
                  • >И? Я говорю, что это - говно. На недействительные последовательности лучше материться явно.
                    письку гни. ты матчасть читал? там написано, что некорректно составленная последовательность будет считаться строкой.
                    в javascript вообще
                    var x = null;
                    var y = false;
                    
                    x == y → true
                    x === y → false
                    без ошибок отработает. но на секундочку так, сравнивается null и false, и еще выдает true. казалось бы почему? но это так работает.
                    Ответить
                    • Я читал твою цитату стандарта, я говорю, что он - говно, ферштейст?

                      >в javascript вообще
                      О, ты признал что js тоже говно?
                      Ответить
                    • Если следовать вашей логике и принять, что "некорректно составленные последовательности" приводятся к строке, то в вашем примере и первое сравнение должно быть false.
                      "null" != "false"
                      Первый раз вы сравнивали нестрого, поэтому имело место численное приведение типов. Оба значения преобразовались в 0.
                      Во втором случае проверялись типы данных, а null и false имеют разные типы.
                      Это не сложно запомнить.
                      Ответить
              • >(причем бы тут питон?)
                Притом, что 3_14dar пойдёт напитон, пидар.
                Ответить

    Добавить комментарий