Задача — проверять правильность адреса электронной почты на этапе ввода, .Net Framework 3.5.
Казалось бы, всё просто. В справке к MSVS 2008 находим код:
bool IsValidEmail(string strIn)
{
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
}
Проверяем адрес dприветd@dмедведd.ru — валидный! Ладно, кириллические домены уже вот-вот появятся, и пусть этот адрес будет валидный, но когда я пытаюсь создать экземпляр класса MailAddress, вылетает сюрприз:
System.FormatException: The specified string is not in the form required for an e-mail address.
at System.Net.Mime.MailBnfHelper.ReadMailAddress(String data, Int32& offset, String& displayName)
at System.Net.Mail.MailAddress.ParseValue(String address)
at System.Net.Mail.MailAddress..ctor(String address, String displayName, Encoding displayNameEncoding)
В
MSDN нашёлся другой код (исправленный в июле 2009, что навеяло надежду):
public static bool IsValidEmail(string strIn)
{
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn, @"^([0-9a-zA-Z]([-\.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$");
}
Но результат тот же. Опыта работы с регулярными выражениями у меня нет, поэтому прошу помощи в отсеивании адресов с русскими буквами. Или правильнее будет вместо использования регулярных выражений пытаться создать MailAddress, и в случае исключения возвращать false?