Проверка адреса электронной почты в приложении С# MVC 4: с использованием или без использования Regex
У меня есть веб-приложение MVC 4, и мне нужно ввести и проверить некоторые адреса электронной почты, не отправляя электронное письмо на адрес электронной почты пользователя.
В настоящее время я использую базовую регулярную проверку электронной почты с помощью этого шаблона:
[RegularExpression(@"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z",
ErrorMessage = "Please enter correct email address")]
Несмотря на то, что это проверка адресов электронной почты, он передает [email protected] в качестве действительного адреса электронной почты. На данный момент у меня есть проверка, которая требует символов @символов. символы, где символы могут быть числовыми/буквенными и._-.
Мне нужно более стандартное подтверждение электронной почты для моего приложения MVC 4. Как это сделать?
Ответы
Ответ 1
Для этого вам нужно регулярное выражение. Посмотрите здесь. Если вы используете .net Framework4.5, вы также можете использовать этот. Поскольку он встроен в .net Framework 4.5.
Пример
[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }
Ответ 2
Расширение на Ehsan Answer....
Если вы используете .Net framework 4.5, вы можете иметь простой способ проверки адреса электронной почты с помощью EmailAddressAttribute
Class в коде.
private static bool IsValidEmailAddress(string emailAddress)
{
return new System.ComponentModel.DataAnnotations
.EmailAddressAttribute()
.IsValid(emailAddress);
}
Если вы рассматриваете REGEX для проверки адреса электронной почты, прочитайте:
Я знал, как проверить адрес электронной почты, пока не прочитаю RFC Phil Haack
Ответ 3
Regex:
[RegularExpression(@"^([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})(\]?)$", ErrorMessage = "Please enter a valid e-mail adress")]
Или вы можете использовать только:
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
Ответ 4
Почему бы просто не использовать EmailAttribute
?
[Email(ErrorMessage = "Bad email")]
public string Email { get; set; }
Ответ 5
Не.
Используйте регулярное выражение для быстрой проверки работоспособности, что-то вроде [email protected]
, но почти все langauges/frameworks имеют лучшие методы проверки адреса электронной почты. Используйте это.
Можно проверить адрес электронной почты с помощью регулярного выражения, но это длинное регулярное выражение. Очень длинный.
И, в конце концов, вы не будете мудрее. Вы только знаете, что формат действителен, но вы все еще не знаете, является ли он активным адресом электронной почты. Единственный способ узнать это - отправить электронное письмо с подтверждением.
Ответ 6
Удивительно, вопрос о проверке адреса электронной почты постоянно появляется на SO!
Здесь вы можете найти одно часто упоминаемое практическое решение: Как найти или проверить адрес электронной почты.
Выдержки:
Достоинство моего регулярного выражения выше состоит в том, что оно соответствует 99% адреса электронной почты, используемые сегодня. Весь адрес электронной почты, который он соответствует, может обрабатывается 99% всего программного обеспечения электронной почты. Если вы ищете для быстрого решения вам нужно только прочитать следующий параграф. если ты хотят узнать все компромиссы и получить множество альтернатив выберите, прочитайте дальше.
См. этот ответ на SO для обсуждения достоинств статьи по вышеуказанной ссылке. В частности, комментарий 2012-04-17 гласит:
Для всех жалобщиков: через 3 часа экспериментирует все решения предлагаемый в этой гигантской дискуссии, это ТОЛЬКО хорошее java regex решение, которое я могу найти. Ни один из материалов rfc5322 не работает в java-regex.