Лучшее регулярное выражение для проверки электронной почты в C#

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

лучшее, что я нашел это

^([w.-]+)@([w-]+)((.(w){2,3})+)$

есть что-то лучше?

4 ответов


- адрес электронной почты: формат RFC 2822
Соответствует обычному адресу электронной почты. Не проверяет домен верхнего уровня.
требуется " нечувствительный к регистру" возможность быть на.

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

использование :

bool isEmail = Regex.IsMatch(emailString, @"\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", RegexOptions.IgnoreCase);

первый вариант (плохо из-за throw-catch, но MS будет работать для вас):

bool IsValidEmail(string email)
{
    try {
        var mail = new System.Net.Mail.MailAddress(email);
        return true;
    }
    catch {
        return false;
    }
}

второй вариант, это читать Я знал, как проверить адрес электронной почты, пока я не прочитал RFC и спецификация RFC


эта функция C# использует регулярное выражение, чтобы оценить, является ли переданный адрес электронной почты синтаксически допустимым или нет.

public static bool isValidEmail(string inputEmail)
{
   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})(\]?)$";
   Regex re = new Regex(strRegex);
   if (re.IsMatch(inputEmail))
    return (true);
   else
    return (false);
}

Регулярное Выражение Проверки Электронной Почты

^[a-z0-9] [- a-z0-9._] +@([- a-z0-9]+.) +[a-z] {2,5}$

или

^[a-z0-9] [- a-z0-9._] +@([- a-z0-9]+[.]) +[a-z] {2,5}$

Демо Ссылке:

https://regex101.com/r/kN4nJ0/53