Подтвердить что ты не робот

Проверка адреса электронной почты в приложении С# 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. Как это сделать?

4b9b3361

Ответ 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.