Najlepsze Wyrażenie regularne do walidacji wiadomości e-mail w C#

Widziałem wiele wyrażeń regularnych dla różnych języków programowania, które mają potwierdzać adresy e-mail. Widziałem wiele komentarzy mówiących, że wyrażenia, o których mowa, nie działają w niektórych przypadkach i że są albo zbyt surowe, albo zbyt liberalne. To, czego szukam, to wyrażenie regularne, którego mogę użyć w moim kodzie C#, które jest ostateczne.

Najlepsze co znalazłem to to

^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$
Czy jest coś lepszego?
Author: Sachin Kainth, 2013-04-23

4 answers

Adres e-mail: RFC 2822 Format
Pasuje do zwykłego adresu e-mail. Nie sprawdza domeny najwyższego poziomu.
wymaga " case insensitive" możliwość włączenia.

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

Użycie:

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);
 124
Author: PaRiMaL RaJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-10 14:45:51

Pierwsza opcja (zła z powodu throw-catch, ale MS zrobi za ciebie robotę):

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

Druga opcja to read wiedziałem, jak zweryfikować adres e-mail, dopóki nie przeczytałem specyfikacji RFC i RFC

 20
Author: Piotr Stapp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-23 11:24:02

Ta funkcja C# używa wyrażenia regularnego do oceny, czy podany adres e-mail jest poprawny składniowo, czy nie.

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);
}
 12
Author: Obama,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-23 11:24:01

Email Validation Regex

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

LUB

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

Link Demo:

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

 0
Author: user9594969,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-04 06:27:28