2010-01-14 2 views
2

Я использую следующее регулярное выражение для проверки адреса электронной почты:Email входа регулярного выражение проверка

"^[-a-zA-Z0-9][-.a-zA-Z0-9]*@[-.a-zA-Z0-9]+(\.[-.a-zA-Z0-9]+)*\.(com|edu|info|gov|int|mil|net|org|biz|name|museum|coop|aero|pro|[a-zA-Z]{2})$" 

К сожалению, это не позволяет адреса электронной почты с дефисом подчеркивания. Напр .:

[email protected]

Как я могу изменить это, чтобы позволить дефис подчеркивания?

+1

Вы имеете в виду символы подчёркивания, как в: _? Дефисы - технически моя жена писателя говорит мне, что разница между тире и дефисом - но я буду проклят, если узнаю, что это такое. – Meep3D

+0

Да, я имел в виду подчеркивание. Для меня слишком рано, чтобы я работал с регулярными выражениями. :) Спасибо, что поймал мою ошибку! – Sesame

+0

Разница между дефисами, тире, минами и т. Д. Pp достаточно раздражает, чтобы они сформировали свой собственный класс символов юникода: «Пунктуационная черта» –

ответ

3

_ не дефис, это подчеркивание. Дефис -

Если это нормально, чтобы начать адрес электронной почты, с подчеркиванием, добавить _ к обоим классам символов, которые предстают перед @

^[-a-zA-Z0-9_][-.a-zA-Z0-9_]*@... 

Если электронный идентификатор не может начинаться с _, добавить это только второй класс символов:

^[-a-zA-Z0-9][-.a-zA-Z0-9_]*@... 

Тем не менее, ваше регулярное выражение имеет несколько вопросов:

  1. Принимает адреса электронной почты, начинающиеся с дефиса; это предназначено? Если нет, то удалите - с первого класса персонажа, чтобы сделать его [a-zA-Z0-9]
  2. Он принимает последовательные периоды после первого символа, тем самым делая [email protected] действительный идентификатор - это статус-по-дизайн?

Спецификация RFC для адреса электронной почты довольно сложная. См. thesethreads для получения дополнительной информации. Также не забудьте проверить один и только perfect and the official regex для проверки адреса электронной почты (имейте в виду, что вы могли бы найти это немного больше, чем то, что здравомыслие бы предложить)

+0

Нет идеального regexpr, потому что письма не могут быть описаны с помощью обычного грамматиста - им нужно контекстно-зависимый грамматик. – Lothar

+0

Вы также можете попробовать использовать http://code.iamcal.com/php/rfc822/full_regexp.txt для проверки адресов электронной почты. – FrustratedWithFormsDesigner

1
"^[-_a-zA-Z0-9][-_.a-zA-Z0-9]*@[-_.a-zA-Z0-9]+(\.[_-.a-zA-Z0-9]+)*\.(com|edu|info|gov|int|mil|net|org|biz|name|museum|coop|aero|pro|[a-zA-Z]{2})$" 

Возможно, возможно?

1
^[-a-zA-Z0-9_][-.a-zA-Z0-9_]*@[-.a-zA-Z0-9]+(\.[-.a-zA-Z0-9]+)*\.(com|edu|info|gov|int|mil|net|org|biz|name|museum|coop|aero|pro|[a-zA-Z]{2})$ 

Я добавил «_» к вашим двум классам символов.

1

Regular-expressions.info имеет очень хорошее обсуждение e-mail address validation by regex, включая его предпочтительное регулярное выражение для «99% всех адресов электронной почты, используемых сегодня», а другое для соответствия адресам электронной почты, как определено в RFC-2822.

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

1

Существует также интересный блог post about email validation на сайте Ларри Остермана.

Это последующее сообщение к исходному сообщению, в котором он пытается сгенерировать регулярное выражение для проверки адреса электронной почты.Его RegExp является:

string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" + 
        @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" + 
        @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"; 

Его заметки:

Главное, чтобы отметить в этой грамматике является то, что локальная часть практически в свободной форме, когда речь идет о локальной части. И есть допустимые символы в локальной части, такие как!, *, $ И т. Д., Которые полностью запрещены в соответствии с RFC2822, которые недопустимы.

и ...

Adi Oltean отметил, что V2 каркаса .Net содержит класс System.Net.MailAddress, который содержит встроенный валидатор.

Похоже, что конструктор System.Net.Mail.MailAddress проверяет адреса электронной почты, и вы можете поймать FormatException, чтобы убедиться, что письмо действительно.

Смежные вопросы