Как с помощью регулярного выражения проверить правильность введенного E-Mail адреса? Существует несколько стандартных регулярных выражений, а также произвольные вариации заточенные для конкретных целей. Рассмотрим все варианты и выберем лучший. Примеры будут представлены с использованием языка PERL. Так как этот язык является отцом всех регулярных выражений в современном программировании.
$_ = "some@email.com";
if(/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/){
return true;
}
Однако в крупных офисах есть свои внутренние домены и они могут не совпадать по размерности со стандартными доменами. Например michael@mail.office уже не подойдет к выше описанному регулярному выражению. Для таких целей можно использовать например такое регулярное выражение:
$_ = "michael@mail.office";
if(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/){
return true;
}
Но могут существовать и более длинные имена почтовых доменов например alex@server.department.new.mail.com. Как быть тут? Можно использовать вот такое выражение:
$_ = "alex@server.department.new.mail.com";
if(/\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}\b/){
return true;
}
Если ничего эдакого не требуется, то можно делать проверку валидности электронного почтового адреса по стандарту RFC 2822.
$_ = "someone@mail.ru";
if(/(?:[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])+)\])/){
return true;
}
Данное регулярное выражение состоит из двух частей. До собачки (@) и после.Если немного усовершенствовать это регулярное выражение то можно получить более короткую запись, которая будет удовлитворять 99.9% из всех используемых на сегодняшний день почтовых адресов.
$_ = "user@gmail.com";
if(/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/){
return true;
}
Пользуйтесь на здоровье.

кууу