Главная | Контакты | Настройки СМЕНИТЬ ПАЛИТРУ:

Главная > Программирование

Проверка правильности ввода e-mail

С этой проблемой приходится сталкиваться довольно часто. Если Вы ставите перед собой задачу со сто процентной гарантией установить реальность предоставленного адреса почтового ящика, то Вам это не удастся. По многим причинам корректно выполнить такую проверку Вы не сможете.
Однако, иногда, регулярные выражения помогают избавиться от некоторых простых и очевидных попыток мошенничества.
Будем исходить из того, что адрес должен иметь вид имя@сервер.зона, у адреса имеются две составляющие - имя пользователя и имя домена, которые разделены знаком @. В имени пользователя могут присутствовать буквы нижнего и верхнего регистров, цифры, знаки подчеркивания, минуса и точки. Для проверки разделителя между именем пользователя и именем домена в выражение требуется добавить @. Таким образом, регулярное выражение, проверяющее имя пользователя и наличие разделителя, имеет следующий вид:

"[0-9a-z_]+@ [0-9а-z_^\. ]+"
Для проверки последнего доменного имени (.ru, .соm) необходимо добавить следующее выражение:
"\. [a-z] {2,З}"
Символ" . " в регулярных выражениях используется для обозначения любого символа, поэтому для поиска соответствия точки в регулярном выражении этот символ экранируется: "\.".
Объединяя эти строки, можно получить следующее регулярное выражение в формате Perl для проверки адресов электронной почты:
"|[0-9a-z -] +@ [0-9a-z - ^ \. ] + \. [a-z] {2, 6} |i"
Шаблон, приведенный выше, удобен, поскольку он будет работать, даже если ICANN создаст новые домены верхнего уровня. Тем не менее, он способен пропустить некоторые ошибочные имена. Намного более удачно в этом плане перечислить комбинации символов, которые допустимы как указание на зоны:
"com|ru|net|info"

Классическое определение формально корректного адреса описано в RFC 822, однако написание программы для обработки всех возможных случаев - задача не из приятных. Вот лишь один пример: придется принять во внимание, что пользователям разрешается вставлять в адреса комментарии! Комментарии заключаются в круглые скобки поэтому допустимо написать:
имя(комментарий к адресу)@сервер.зона
Это эквивалентно адресу "имя@сервер.зона".
Некоторые стараются осуществить дополнительную фоновую проверку, посылая DNS-серверу запрос, зарегистрирован ли данный адрес, Большого смысла в этом нет, т. к. технически это не всегда выполнимо, и вы можете не допустить на свой сайт ни в чем не повинных и совершенно законных пользователей, действуя таким образом.
Проверяя достоверность адресов электронной почты, надо принимать во внимание, что для пользователя не составляет большого труда ввести абсолютно законный и работающий адрес, принадлежащий кому-то другому.
Если больше всего вы беспокоитесь из-за возможных опечаток, заставьте пользователей вводить адрес дважды и сравнивайте результаты ввода. Если они совпадают, то, возможно, являются верными. Кроме того, отсекайте часто используемые фиктивные адреса. Задача, конечно, не из легких, но если Вы сильно заботитесь о том, что бы пользователь вводил существующий адрес..., возможно, это имеет смысл.
Однако если вы хотите проверить, действительно ли пользователи имеют доступ к почтовому ящику, адрес которого они указали, то одним из способов убедиться в этом является отправка на их адрес сообщения с просьбой прислать ответ или посетить страницу вашего сайта и ввести специальный код, напечатанный в теле сообщения, для подтверждения регистрации.


Главная > Программирование