Я использую следующее регулярное выражение для проверки адреса электронной почты:
"^[-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})$"
К сожалению, это не позволяет адресам электронной почты с символами подчеркивания дефисов. Пример:
Как я могу изменить это, чтобы подчеркивать дефисы?
_
не дефис, это подчеркивание. Hyphen -
Если это нормально, введите адрес электронной почты с подчеркиванием, добавьте _
в оба класса символов, которые появляются перед @
^[-a-zA-Z0-9_][-.a-zA-Z0-9_]*@...
Если идентификатор электронной почты не может начинаться с _
, добавьте его только ко второму классу символов:
^[-a-zA-Z0-9][-.a-zA-Z0-9_]*@...
Тем не менее, у вашего регулярного выражения есть несколько проблем:
-
из первого класса символов, чтобы сделать его [a-zA-Z0-9]
[email protected]
действительным id - это статус-за-дизайн?Спецификация RFC для адреса электронной почты довольно сложна. См. эти темы для получения дополнительной информации. Также не забудьте проверить только perfect и официальное регулярное выражение для проверки адресов электронной почты (предупреждайте, что вы можете найти его маленький дольше, чем может предложить здравомыслие)
Существует также интересный блог сообщение о проверке подлинности электронной почты на веб-сайте Ларри Остермана.
Это последующее сообщение в исходное сообщение, в котором он пытается создать регулярное выражение для проверки адреса электронной почты. Его 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, чтобы убедиться, что письмо действительно.
Regular-expressions.info имеет очень хорошее обсуждение подтверждение адреса электронной почты с помощью регулярного выражения, включая его предпочтительное регулярное выражение для "99% всех адресов электронной почты, используемых сегодня", а другой для соответствия адресам электронной почты, как определено в RFC-2822.
Я не буду делать автору плохую услугу, копируя его работу здесь. Но я считаю, что это достойно чтения, поскольку оно напрямую связано с вашим вопросом.
"^[-_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})$"
Возможно?
^[-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})$
Я добавил "_" к вашим двум классам символов.