Подтверждение регулярного выражения в письме - PullRequest
2 голосов
/ 14 января 2010

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

"^[-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})$"

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

first_last@abc.com

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

Ответы [ 5 ]

3 голосов
/ 14 января 2010

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

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

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

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

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

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

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

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

1 голос
/ 14 января 2010

На сайте Ларри Остермана также есть интересный блог о проверке электронной почты .

Это сообщение о продолжении исходного сообщения, в котором он пытается создать регулярное выражение для проверки адреса электронной почты. Его 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 и не допускаются.

и ...

Ади Олтиан отметил, что V2 платформы .Net содержит класс System.Net.MailAddress, который содержит встроенный валидатор.

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

1 голос
/ 14 января 2010

Regular-expressions.info имеет очень хорошее обсуждение проверки адреса электронной почты с помощью регулярного выражения , включая его предпочтительное регулярное выражение для "99% всех адресов электронной почты, используемых сегодня", и еще один для сопоставлять адреса электронной почты в соответствии с RFC-2822.

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

1 голос
/ 14 января 2010
^[-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 голос
/ 14 января 2010
"^[-_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})$"

Возможно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...