Regex, email address validation
От: whatever  
Дата: 10.08.09 08:38
Оценка:
Задача — проверять правильность адреса электронной почты на этапе ввода, .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?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.