Forum Webscript.Ru
Программирование => Регулярные выражения => Тема начата: Forza от 30 Октября 2004, 11:10:35
-
Обнаружив, что в случае отправки е-мэйла на адрес, в котором юзер указал какую-нибудь лабуду, получается интернал сервер еррор, я решил проверять введённые юзером е-мэйлы.
Конечно, чтобы скрипт не валился достаточно простой проверки типа /.+@.+/, но заодно хотелось сделать максимально возможную проверку е-мэйла на похожесть на настоящий (вдруг юзер просто ошибся). Из одной книги (какой, уже не помню) давно скопировал следующий регэксп:
/^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$/, т.е.
а) до собаки имеем набор alphanumeric символов, в котором разделителями могут быть одиночные точка и/или тире
б) после собаки сначала - такой же набор с такими же разделителями, потом - набор из доменов высшего уровня (как минимум 1!), длиной от 2 до 3 символов.
Почитав тут про введение всяких разных новых доменов высшего уровня я решил, что тут как минимум есть одно неправильное условие - ограничение длины домена верхнего уровня, т.е. получим регэксп:
/^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,})+$/
Что ещё посоветуете исправить? Хочется сделать регэксп с минимальными ограничениями, чтобы он удовлетворял всевозможным е-мэйлам, и скрипт бы не давал юзеру его обойти! Т.е. если формат е-мэйлов очень плавающий, тогда вернёмся к /.+@.+/
-
Forza
http://forums.webscript.ru/showthread.php?s=&threadid=13029
-
Мда, ты почти убедил меня в проверке /.+@.+/, только чтобы sendmail не загибался от отсутствия собаки. ;)
-
Forza
Да нет, ты знаешь, я уже больше года пользуюсь етим регом, и ничего... никто не ругался... ;)
Даже не сильно задавлся желанием его проверять, та и в общем это не нужно...
Проще IMHO отлавливать ошибку sendmail
-
Forza:
Что ещё посоветуете исправить?
:) наверное, если все-таки интернациональные домены типа "вася.ру" будут более распространены чем сейчас :) то нужно будет учитывать нац.кодировку
-
Phoinix:
Проще IMHO отлавливать ошибку sendmail
Практика показала, что для того чтобы sendmail не давал ошибку 500, ему достаточно, чтобы в "е-меле" была "собака", т.е. без всякой ругани отправляет письмо на a@a.
К тому же вовсе НЕ обязательно после указания юзером своего е-мэйла за этим будет следовать отправление ему письма.
-
Forza посмотри устройство Email::Valid и RFC::RFC822::Address