=()= / Говнокод #2074 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 alabax, (Updated )

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

    • Не обижайтесь, пожалуйста, код выложил сюда не поиздеваться ради а в назидание, есть задачи которые так решаются.
      Ответить
  • Это не говнокод, это говностандарт. Получите заслуженный минус.
    Ответить
  • 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/;
    Ответить
    • Ваша ссылка отличается от той, что в начале. Вы рассчитываете, что те, кому лень скачать и распаковать станут читать в онлайне?
      Ответить
  • Трамвай медленно катился по пустому городу, вагон покачивался на стыках, а я отсасывал самый большой член, который когда-либо видел в своей жизни. Я стянул с него джинсы до колен и смог ласкать накачанные бедра, которые тоже были густо покрыты волосами. Несмотря на все мои старания во рту у меня помещалась только головка и, чтобы доставить ему удовольствие я вылизывал член от корня вверх, спускался к яйцам и ласкал губами внутреннюю поверхность бедер. Мы так увлеклись процессом, что не заметили как в вагон вошёл еще кто- то!
    Ответить
  • Пока надевал обувь, я услышал, как Саманта постучала в комнату сына со словами:
    Ответить

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8