Forum Webscript.Ru

Программирование => Регулярные выражения => Тема начата: Forza от 30 Октября 2004, 11:10:35

Название: регэксп е-мэйла
Отправлено: Forza от 30 Октября 2004, 11:10:35
Обнаружив, что в случае отправки е-мэйла на адрес, в котором юзер указал какую-нибудь лабуду, получается интернал сервер еррор, я решил проверять введённые юзером е-мэйлы.
Конечно, чтобы скрипт не валился достаточно простой проверки типа /.+@.+/, но заодно хотелось сделать максимально возможную проверку е-мэйла на похожесть на настоящий (вдруг юзер просто ошибся). Из одной книги (какой, уже не помню) давно скопировал следующий регэксп:
/^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$/, т.е.
а) до собаки имеем набор alphanumeric символов, в котором разделителями могут быть одиночные точка и/или тире
б) после собаки сначала - такой же набор с такими же разделителями, потом - набор из доменов высшего уровня (как минимум 1!), длиной от 2 до 3 символов.

Почитав тут про введение всяких разных новых доменов высшего уровня я решил, что тут как минимум есть одно неправильное условие - ограничение длины домена верхнего уровня, т.е. получим регэксп:
/^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,})+$/

Что ещё посоветуете исправить? Хочется сделать регэксп с минимальными ограничениями, чтобы он удовлетворял всевозможным е-мэйлам, и скрипт бы не давал юзеру его обойти! Т.е. если формат е-мэйлов очень плавающий, тогда вернёмся к /.+@.+/
Название: регэксп е-мэйла
Отправлено: Phoinix от 30 Октября 2004, 13:33:22
Forza
http://forums.webscript.ru/showthread.php?s=&threadid=13029
Название: регэксп е-мэйла
Отправлено: Forza от 30 Октября 2004, 13:57:24
Мда, ты почти убедил меня в проверке /.+@.+/, только чтобы sendmail не загибался от отсутствия собаки. ;)
Название: регэксп е-мэйла
Отправлено: Phoinix от 30 Октября 2004, 14:41:54
Forza
Да нет, ты знаешь, я уже больше года пользуюсь етим регом, и ничего... никто не ругался... ;)
Даже не сильно задавлся желанием его проверять, та и в общем это не нужно...

Проще IMHO отлавливать ошибку sendmail
Название: регэксп е-мэйла
Отправлено: Green Kakadu от 30 Октября 2004, 15:05:54
Цитировать
Forza:
Что ещё посоветуете исправить?

:) наверное, если все-таки интернациональные домены типа "вася.ру" будут более распространены чем сейчас :) то нужно будет учитывать нац.кодировку
Название: регэксп е-мэйла
Отправлено: Forza от 30 Октября 2004, 22:57:44
Цитировать
Phoinix:
Проще IMHO отлавливать ошибку sendmail


Практика показала, что для того чтобы sendmail не давал ошибку 500, ему достаточно, чтобы в "е-меле" была "собака", т.е. без всякой ругани отправляет письмо на a@a.

К тому же вовсе НЕ обязательно после указания юзером своего е-мэйла за этим будет следовать отправление ему письма.
Название: регэксп е-мэйла
Отправлено: NeoNox от 31 Октября 2004, 01:05:50
Forza посмотри устройство Email::Valid и RFC::RFC822::Address