Давно убежден, что проверять на сайтах введенные EMail'ы регулярками - занятие бесполезное, и даже вредное.
Бесполезное, потому что даже если удастся проверить синтаксис EMail'а, это никак не гарантирует того, что он а) существует, б) человек его читает, в) человек понимает, что ему пишут.
Как защита от случайных ошибок это тоже не годится, потому что скорее всего человек ошибется другим вполне синтаксически корретным значением (буковки, например, попутает).
Вредность же заключается в том, что пользователи устали от просьб ввести свой EMail там, где это им совершенно не нужно (а что нужно владельцам сайту их заботит гораздо меньше). Там, где им нужно (чтобы прислали подтверждение какое-нибудь), они сами будут заботиться о правильности ввода. А где не нужно, они сознательно будут вводить кривые EMail'ы. И это нормально, это решать им.
И вот тут регулярка начинает их раздражать, потому что я не видел еще в реальном использовании ни одной регулярки (кроме ^.*$
), которая бы работала без глюков. Причем, ладно бы они просто пропускали бы мусор, так еще ведь и нормальные адреса не пускают. То большие буквы вдруг "невалидны", то точка в части до собаки, то еще что-то...
Я раньше думал, что вообще невозможно создать регулярку, которая бы точно соответствовала RFC. Но сегодня у Неда Батчелдера прочитал, что оказывается, есть такая регулярка. Не поленитесь, посмотрите на нее - хорошо отрезвляет :-)
Комментарии: 12
Меня больше заинтересовал момент необходимости и логичности проверки на валидность. Каждый раз матерился, но как-то на додумывался, что на самом деле это никому не нужно =)) ...
Даже не верится что это мог составить человек...
Так можно и шифты на клавиатуре загубить :)
Человеку все же свойственно ошибаться :) Хорошо если после ввода юзер может проверить и исправить ошибку, а если нет?
Но с темой я согласен - попытка решить проблему регуляркой как правило приводит к появлению еще одной проблемы :)
Вообще читал, что создание регулярки для валидации email адреса, математически нерешаемая задача. Для данной регулярки мне кажется вообще нельзя доказать что она правильная. Интересно сколько времени он угробил на написание программы для трансформации грамматик? Мы же не верим что эту регулярку написал человек? :)
тут есть другой момент - не все существующие емейлы соответствуют RFC. Многие почтовые сервера и клиенты смотрят на RFC слегка сквозь пальцы, а потому эта реулярка тоже отсекает часть вполне рабочих емейлов
Нормальная регулярка, есть, кстати, в perl cookbook. Просто ты не умеешь их готовить :-)
Наверно, дело в программерской лени. Куда проще написать одну строчку, проверяющую синтаксис, чем писать проверку правильность адреса нормальным образом.
Enkryptor: а что подразумевается под словами "нормальным образом"?
Alena: а что подразумевается под словами “нормальным образом”?
Надо полагать что скрипт, которому в формы пихается (Аяксом, как сейчас модно)
адрес, тот пингует сервер, и в случае наличия, спрашивает если ли такой e-mail. Это сделать можно быстро - затраты ресурсов здесь минимальны.
и в ответ - валиден e-mail или нет.
что на php что на .net/asp это написать несложно. И уж по всякому наверняка есть такой серверный компонент. Только зачем это нужно?
проверили что человек не ошибся (например я часто набираю user2domain.com)
и достаточно.
Интересно в Python эта проверка пройдет..?
А мне нравиться то, что для того чтоюы отправить этот коммент опять пришллось вводить емэил... :) Интересно, он проверяется этой регуляркой или дубовой? p.s.эксперементировать не стал.
Тема в тему 21-го Века. пора с этим кончать)
Всё таки проверка регуляркой email иногда бывает необходима. Например, сейчас делаю программу для обработки определённых данных, которой пользоваться буду не я, а, соответственно, некий заказчик и его операторы. Исходные данные в неё загружаются в формате CSV. И кто-то может загрузить этот исходный файл с требуемыми данными начиная с первой строки, а кто-то может пихать файл, в котором в первой строке - имена столбцов. И, хоть и есть текстовое поле, в котором можно указать строку, с которой начинаются реальные данные - не факт, что юзер этим воспользуется. И не факт, что он вообще понимает, для чего это текстовое поле. Так что приходится проверять...