Почему люди используют регулярные выражения для электронной почты и других сложных проверок? - PullRequest
13 голосов
/ 17 октября 2008

Есть несколько электронных писем регулярных выражений вопросов выскакивающих вверх здесь, и я, честно говоря, озадачен, почему люди используют эти безумно тупые сопоставление выражений, а не очень простой синтаксический анализатор, который разбивает электронную почту на токены имени и домена, а затем проверяет их на соответствие допустимым символам, разрешенным для имени (дальнейшая проверка не может быть выполнена в этой части), и действительным символам для домена (и я полагаю, вы могли бы добавить проверку для всех TLD в мире, а затем еще один уровень доменов второго уровня для стран с таким (например, com.uk)).

Настоящая проблема заключается в том, что значения tlds и slds постоянно меняются (вопреки распространенному мнению), поэтому вы должны продолжать обновлять регулярные выражения, если планируете выполнять всю эту высокоуровневую проверку всякий раз, когда корневые серверы имен отправляют изменения.

Почему бы не иметь модуль, который просто проверяет домены, который извлекает данные из базы данных или плоского файла и дополнительно проверяет DNS на соответствие записей?

Я серьезно говорю, почему все так стремятся придумать для этого идеальное регулярное выражение? Это не кажется подходящим решением проблемы ...

Убедите меня, что это не только возможно сделать в регулярном выражении (и удовлетворить всех), но и что это лучшее решение, чем собственный анализатор / валидатор.

-Adam

Ответы [ 12 ]

1 голос
/ 17 октября 2008

Люди пишут регулярные выражения, потому что большинство разработчиков, как это, решают простую задачу самым «крутым» и «эффективным» способом (что означает, что она должна быть как можно более нечитаемой).

В Java есть библиотеки для проверки того, представляет ли String адрес электронной почты, и вам не нужно ничего знать о регулярных выражениях. Эти библиотеки должны быть доступны для других языков aswel.

Как Джейми Завински сказал в 1997 году: «Некоторые люди, сталкиваясь с проблемой, думают:« Я знаю, я буду использовать регулярные выражения. «Теперь у них две проблемы».

0 голосов
/ 17 октября 2008

Регулярные выражения гораздо быстрее в использовании, и они проверяют только то, что указано в RFC. Написать свой парсер? Какие? Для использования регулярного выражения требуется 10 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...