Re: Regex, email address validation
От: Warturtle  
Дата: 10.08.09 14:23
Оценка:
Здравствуйте, whatever, Вы писали:

W>Задача — проверять правильность адреса электронной почты на этапе ввода, .Net Framework 3.5.

W>Казалось бы, всё просто. В справке к MSVS 2008 находим код:
W>
W>bool IsValidEmail(string strIn)
W>{
W>    // Return true if strIn is in valid e-mail format.
W>    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})(\]?)$"); 
W>}
W>

W>Проверяем адрес dприветd@dмедведd.ru — валидный! Ладно, кириллические домены уже вот-вот появятся, и пусть этот адрес будет валидный, но когда я пытаюсь создать экземпляр класса MailAddress, вылетает сюрприз:
W>System.FormatException: The specified string is not in the form required for an e-mail address.
W> at System.Net.Mime.MailBnfHelper.ReadMailAddress(String data, Int32& offset, String& displayName)
W> at System.Net.Mail.MailAddress.ParseValue(String address)
W> at System.Net.Mail.MailAddress..ctor(String address, String displayName, Encoding displayNameEncoding)

W>В MSDN нашёлся другой код (исправленный в июле 2009, что навеяло надежду):

W>
W>public static bool IsValidEmail(string strIn)
W>{
W>    // Return true if strIn is in valid e-mail format.
W>    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})$"); 
W>}
W>

W>Но результат тот же. Опыта работы с регулярными выражениями у меня нет, поэтому прошу помощи в отсеивании адресов с русскими буквами. Или правильнее будет вместо использования регулярных выражений пытаться создать MailAddress, и в случае исключения возвращать false?
зацени
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.