Давно убежден, что проверять на сайтах введенные EMail'ы регулярками - занятие бесполезное, и даже вредное.

Бесполезное, потому что даже если удастся проверить синтаксис EMail'а, это никак не гарантирует того, что он а) существует, б) человек его читает, в) человек понимает, что ему пишут.

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

Вредность же заключается в том, что пользователи устали от просьб ввести свой EMail там, где это им совершенно не нужно (а что нужно владельцам сайту их заботит гораздо меньше). Там, где им нужно (чтобы прислали подтверждение какое-нибудь), они сами будут заботиться о правильности ввода. А где не нужно, они сознательно будут вводить кривые EMail'ы. И это нормально, это решать им.

И вот тут регулярка начинает их раздражать, потому что я не видел еще в реальном использовании ни одной регулярки (кроме ^.*$), которая бы работала без глюков. Причем, ладно бы они просто пропускали бы мусор, так еще ведь и нормальные адреса не пускают. То большие буквы вдруг "невалидны", то точка в части до собаки, то еще что-то...

Я раньше думал, что вообще невозможно создать регулярку, которая бы точно соответствовала RFC. Но сегодня у Неда Батчелдера прочитал, что оказывается, есть такая регулярка. Не поленитесь, посмотрите на нее - хорошо отрезвляет :-)

Комментарии: 12

  1. Александр Шугард

    Меня больше заинтересовал момент необходимости и логичности проверки на валидность. Каждый раз матерился, но как-то на додумывался, что на самом деле это никому не нужно =)) ...

  2. Виталий

    Даже не верится что это мог составить человек...
    Так можно и шифты на клавиатуре загубить :)

  3. Денис Зайцев

    Человеку все же свойственно ошибаться :) Хорошо если после ввода юзер может проверить и исправить ошибку, а если нет?
    Но с темой я согласен - попытка решить проблему регуляркой как правило приводит к появлению еще одной проблемы :)

  4. Corwin

    Вообще читал, что создание регулярки для валидации email адреса, математически нерешаемая задача. Для данной регулярки мне кажется вообще нельзя доказать что она правильная. Интересно сколько времени он угробил на написание программы для трансформации грамматик? Мы же не верим что эту регулярку написал человек? :)

  5. Алексей Захлестин

    тут есть другой момент - не все существующие емейлы соответствуют RFC. Многие почтовые сервера и клиенты смотрят на RFC слегка сквозь пальцы, а потому эта реулярка тоже отсекает часть вполне рабочих емейлов

  6. Fabler

    Нормальная регулярка, есть, кстати, в perl cookbook. Просто ты не умеешь их готовить :-)

  7. Enkryptor

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

  8. Alena

    Enkryptor: а что подразумевается под словами "нормальным образом"?

  9. Chapai

    Alena: а что подразумевается под словами “нормальным образом”?

    Надо полагать что скрипт, которому в формы пихается (Аяксом, как сейчас модно)
    адрес, тот пингует сервер, и в случае наличия, спрашивает если ли такой e-mail. Это сделать можно быстро - затраты ресурсов здесь минимальны.
    и в ответ - валиден e-mail или нет.
    что на php что на .net/asp это написать несложно. И уж по всякому наверняка есть такой серверный компонент. Только зачем это нужно?
    проверили что человек не ошибся (например я часто набираю user2domain.com)
    и достаточно.

  10. Иссык-Куль Каракол

    Интересно в Python эта проверка пройдет..?

  11. Максим

    А мне нравиться то, что для того чтоюы отправить этот коммент опять пришллось вводить емэил... :) Интересно, он проверяется этой регуляркой или дубовой? p.s.эксперементировать не стал.

    Тема в тему 21-го Века. пора с этим кончать)

  12. Олег

    Всё таки проверка регуляркой email иногда бывает необходима. Например, сейчас делаю программу для обработки определённых данных, которой пользоваться буду не я, а, соответственно, некий заказчик и его операторы. Исходные данные в неё загружаются в формате CSV. И кто-то может загрузить этот исходный файл с требуемыми данными начиная с первой строки, а кто-то может пихать файл, в котором в первой строке - имена столбцов. И, хоть и есть текстовое поле, в котором можно указать строку, с которой начинаются реальные данные - не факт, что юзер этим воспользуется. И не факт, что он вообще понимает, для чего это текстовое поле. Так что приходится проверять...

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