Проверка адреса электронной почты показывает неправильные адреса как правильные

У меня есть вопрос относительно проверки электронной почты в (Visual) C#.

Я искал в Интернете и нашел несколько способов сделать это. Например. здесь:

Как ни странно, оба они пропускают такие электронные письма, как «ex.as@asd,com» (обратите внимание на запятую вместо точки).

Однако, если я попытаюсь отправить электронное письмо через объект SmtpClient, я получу исключение, потому что данный адрес электронной почты имеет неправильный формат.

Есть идеи?


person TheElk    schedule 31.07.2015    source источник
comment
Мне может быть довольно сложно проверить адрес электронной почты. Поскольку именно ваш SMTP-клиент решает, что является допустимым, вы должны использовать его в качестве валидатора. stackoverflow.com/a/1374644/1341538 Этот пост показывает хороший пример.   -  person Andres Castro    schedule 31.07.2015
comment
Используйте простое регулярное выражение в ответе принято. stackoverflow.com/questions/13719821 /   -  person EZI    schedule 31.07.2015
comment
Мне очень жаль, что они сработали... Я просто отредактировал проверку не в том месте своей программы. Тем не менее спасибо за все ваши полезные ответы!   -  person TheElk    schedule 31.07.2015


Ответы (2)


У меня работает регулярное выражение из первой ссылки. Вам следует заменить все \ на \\ и " на \".

Я пробовал этот код:

var validateEmailRegex = new Regex("(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])");
var isValidEmail = validateEmailRegex.Match("ex.as@asd,com").Success;

И я получил isValidEmail == false.

person Vadim Pashkov    schedule 31.07.2015

Если вы попробуете ниже, это вызовет исключение таким образом, что вы сможете проверить адрес.

try 
{
    address = new MailAddress("ex.as@asd,com", "Email validation").Address;
} 
catch(FormatException) {
    //Invalid email address
}

MailAdress.Address< Свойство /a> генерирует исключение FormatException, когда вы пытаетесь его получить.

person CharithJ    schedule 31.07.2015