Подтверждение регулярного выражения в письме

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

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

[email protected]

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

  • 1
    Вы имеете в виду подчеркивания как в: _? Дефисы - ну, технически, моя жена писателя говорит мне, что есть разница между тире - и дефисом - но я буду проклят, если узнаю, что это такое.
  • 0
    Да, я имел в виду подчеркивание. Для меня слишком рано работать с регулярными выражениями. :) Спасибо, что поймали мою ошибку!
Показать ещё 1 комментарий
Теги:
validation
email

5 ответов

3
Лучший ответ

_ не дефис, это подчеркивание. 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 и официальное регулярное выражение для проверки адресов электронной почты (предупреждайте, что вы можете найти его маленький дольше, чем может предложить здравомыслие)

  • 0
    Идеального регулярного выражения не существует, потому что электронные письма нельзя описать обычным грамматиком - им нужен контекстно-зависимый грамматик.
  • 0
    Вы также можете попробовать использовать code.iamcal.com/php/rfc822/full_regexp.txt для проверки адресов электронной почты.
1

Существует также интересный блог сообщение о проверке подлинности электронной почты на веб-сайте Ларри Остермана.

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

1

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

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

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})$

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню