1. Perl / Говнокод #2074

    −303.1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    (?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
    )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
    \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
    ?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ 
    \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
    31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
    ](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
    (?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
    (?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
    |(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
    ?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
    r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
     \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
    ?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
    )*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
     \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
    )(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
    )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
    *:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
    |\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
    \n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
    \r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
    ]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
    ]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
    ?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
    :(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
    :\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
    :(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
    [ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] 
    \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
    \\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
    @,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
    (?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
    )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
    ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
    :[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
    \]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
    \031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
    ?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;

    И в том же духе еще 43 строки. Регулярное выражение для проверки емейл адреса. Все на полном серьезе и в соответствии со стандартом. Взято отсюда http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html

    Запостил: alabax, 30 Октября 2009

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

    • АААААААА!!!!
      Ответить
    • Все ясно как белый день
      Ответить
    • Как бы написал автор?
      Ответить
      • Не обижайтесь, пожалуйста, код выложил сюда не поиздеваться ради а в назидание, есть задачи которые так решаются.
        Ответить
    • Это первоапрельский rfc
      Ответить
    • Это не говнокод, это говностандарт. Получите заслуженный минус.
      Ответить
    • Целиком и полностью согласен с sudden_def
      Ответить
    • Огласите весь код, пожалуйста.
      Ответить
    • 1)Боян, ибо уже был.
      2)Не говнокод, а стандарт, ибо предназначался для надёжной проверки адреса компьютером, а не что-бы ты его понял. Так как сдесь все верно и исправлять его нет необходимости. ;)
      Ответить
      • 1) Предоставьте ссылку, пожалуйста.
        2) Представьте себе задачу учесть дополнения к стандарту, например, международные символы в адресе.
        Ответить
    • согласен.. в какой-то книжке в конце этот регексп был приведён.. так что не говнокод..
      но ведь пиздец
      Ответить
      • Чистейшей воды говнокод. Даже то, что он точно соответствует стандарту, не отменяет его говнокодности. Я лично не знаю ни одного программиста, который писал бы такие regExp'ы только для того, чтобы следовать стандарту.
        Думаю, на любом языке правильнее будет написать немного проверочного кода, чем работать с ТАКИМ.
        Ответить
        • ну вообще с таким кодом не работают.. Если он сам работает и он полностью выполняет свою задачу, причём хорошо (ну то есть быстро там или какие ещё критерии), то его просто заворачивают в функцию/модуль и пользуются. Это лучше чем писать свой говнокод, который ещё неизвестно будет ли правильно работать
          Ответить
    • очнитесь, какой в жопу стандарт? Такие регулярки нельзя писать. надо писать вместо этого кусок программы, с условиями и т.д., а это говнокодище есть говнокод, и ничего больше
      Ответить
      • плюсадын!
        Ответить
      • куча условий+куча региксов - а об скорости выполнения скрипта подумал?
        Ответить
        • Интересно, с чего Вы взяли что альтернативная реализация обязательно должна состоять из кучи условий и кучи регулярных выражений?
          Ответить
        • ну, а ты пишешь код сразу нулями и единицами, чтобы компьютеру было быстрее обрабатывать?
          Ответить
        • регэкспы это и есть куча условий, только неудобоваримые
          Ответить
          • Продолжим эксперименты с логикой первого порядка. Согласны ли Вы с утверждением "есть условия невыразимые регулярными выражениями; (и) проверку, основанную на регулярных выражениях, можно заменить алгоритмом на тьюринг-полном языке"? Внимание, во второй части подсказка. :)
            Ответить
      • Ппц, берите модуль, который чекает емейлы. Какая разница, что у него будет внутри: 1 регексп на 43 строки или 100500 if-ов на проверку кастомных условий?
        Ответить
        • блин, если даже этот регэксп выразить через переменные, он станет проще. Взгляни на него, он же состоит из одинаковых элементов.
          А смысл этого в том, чтобы понимать, что за хня там написана, а не доверять хер знает кому, кто написал этот регексп
          Ответить
          • Да действительно, это выражение генерируется из более простых частей. Рекомендую интересующимся ознакомиться с исходником.
            Пара вопросов на засыпку:
            Можно ли сделать регулярное выражение меньше чем на 82 строки, которое будет (с теми же предварительными условиями что и у автора) проверять e-mail?
            Все вспоминают об if'ах когда речь заходит о проверке. Можно ли решить данную задачу без циклов? :)
            Ответить
            • Нет. Иначе пострадает качество проверки. Помоему это минимальная реализация.
              Ответить
              • Любопытно стало, на какой из двух вопросов этот ответ?
                Ответить
      • Даа? А Ваша пачка if..elsif...elsif не говнокодом будет? Еще каким. А регексп построен из блоков, в книге описано, как он строится. Так что низачот.
        Ответить
        • Где тут блоки?
          Какая еще книга?
          Если бы из блоков, то может и вопросов бы ни у кого не появилось
          Ответить
          • Книга к тому, что изначально я его видел в каком-то кукбуке перловом, там было подробно разобрано построение. Если бы Вы удосужились открыть код модуля, то там тоже все блоками. Так что снова низачот.
            Ответить
          • Книга Фридла "Mastering Regular Expressions".
            Настоятельно рекомендовал Вам с ней ознакомиться, это просто библия по регулярным выражениям. Кстати не только для Perl'а, а также для PHP, Java, Python, Ruby, MySQL, VB.NET, C# (и других языков платформы .NET)
            Данный код там приведён в качестве примера в конце книги
            Ответить
            • Простите, кто и зачем рекомендовал?
              Ответить
        • И Вы тоже считаете, что проверка состоит исключительно из условных операторов?
          Ответить
          • Простите, это Вы мне? ;)
            Ответить
          • Нет, не считаю, естественно. Откройте модуль, и почитайте, как там реализовано построение структуры адреса. Аккуратно, блоками.
            Ответить
        • Угу, пусть попробуют сначала это if`ами написать, да чтоб по стандарту!
          Ответить
      • Хуйню говоришь....вот блять из-за таких как ты и появляются говнобраузеры типа ИЕ, которые не поддерживают стандарты.
        Если есть тандарт(РФЦ) то его надо соблюдать, хоть ты ебанись!
        Ответить
        • > то его надо соблюдать, хоть ты ебанись
          я смотрю, ты уже ебанутый
          Ответить
    • Можно было части регулярного выражения распихать по блокам:

      $part1 = qr/bla-bla-bla/;
      $part2 = qr/bla-bla-bla/;

      $regexp = /$part1.$part2/;
      Ответить
    • Вы бы сначала код посмотрели, прежде чем спорить http://cpansearch.perl.org/src/PDWARREN/Mail-RFC822-Address-0.3/Address.pm
      Ответить
      • Ваша ссылка отличается от той, что в начале. Вы рассчитываете, что те, кому лень скачать и распаковать станут читать в онлайне?
        Ответить
    • Трамвай медленно катился по пустому городу, вагон покачивался на стыках, а я отсасывал самый большой член, который когда-либо видел в своей жизни. Я стянул с него джинсы до колен и смог ласкать накачанные бедра, которые тоже были густо покрыты волосами. Несмотря на все мои старания во рту у меня помещалась только головка и, чтобы доставить ему удовольствие я вылизывал член от корня вверх, спускался к яйцам и ласкал губами внутреннюю поверхность бедер. Мы так увлеклись процессом, что не заметили как в вагон вошёл еще кто- то!
      Ответить
    • Пока надевал обувь, я услышал, как Саманта постучала в комнату сына со словами:
      Ответить

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