- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
function checkmail($mail)
{
$mail = trim($mail);
if ((strlen($mail) == 0) OR (!preg_match('/^[a-z0-9_-]{1,20}+(\.){0,2}+([a-z0-9_-]){0,5}@(([a-z0-9-]+\.)+(com|net|org|mil|edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})$/is', $mail))) {
return false;
}
return true;
}
то есть такие адреса:
"user name" <[email protected]>, <[email protected]>, [email protected]
Если же надо только адрес, без всяких кавычек, то регулярка, гораздо проще.
/^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z
0-9])$/i
так что не канает))
а насчёт root@localhost согласен, обязательно нужно пропускать, обязательно.
тройной пусть останется в запасе, на случай дальнейших откровений о "правильных" адресах
модифицируй регулярку.
http://govnokod.ru/4526#comment51196
модифицируй регулярку.
http://govnokod.ru/4526#comment51196
Я скачал пакет по ссылке http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html
Достал оттуда метод, формирующий эту страшную регулярку для проверки мыла
my $addr_spec = "$localpart\@$lwsp*$domain";
Она содержит регулярку для проверки только самого адреса.
Я вывел её, вот она.
(?:[^()<>@,;:\\".\[\] \000-\037\177]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\037\177]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\037\177]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\037\177]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[(?:[^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*
регулярка матчит и root@localhost
"127.0.0.1"@[127.0.0.1]
Abigail <[email protected]>
Abigail<[email protected]>
Abigail<@a,@b,@c:[email protected]>
"This is a phrase"<[email protected]>
"Abigail "<[email protected]>
"Joe & J. Harvey" <example @Org>
Abigail <abigail @ example.com>
Abigail made this < abigail @ example . com >
Abigail(the bitch)@example.com
Abigail <abigail @ example . (bar) com >
Abigail < (one) abigail (two) @(three)example . (bar) com (quz) >
Abigail (foo) (((baz)(nested) (comment)) ! ) < (one) abigail (two) @(three)example . (bar) com (quz) >
Abigail <abigail(fo\(o)@example.com>
Abigail <abigail(fo\)o)@example.com>
(foo) [email protected]
[email protected] (foo)
"Abi\"gail" <[email protected]>
abigail@[example.com]
abigail@[exa\[ple.com]
abigail@[exa\]ple.com]
":sysmail"@ Some-Group. Some-Org
Muhammed.(I am the greatest) Ali @(the)Vegas.WBA
mailbox.sub1.sub2@this-domain
[email protected]
name:;
':;
name: ;
Alfred Neuman <Neuman@BBN-TENEXA>
Neuman@BBN-TENEXA
"George, Ted" <[email protected]>
Wilt . (the Stilt) [email protected]
Cruisers: Port@Portugal, Jones@SEA;
$@[]
*()@[]
"quoted ( brackets" ( a comment )@example.com
======================================== =====
Я хотел выделить такую регулярку, которая матчит только
такие адреса "[email protected]"
P.S.
На самом деле, надо допилить мою регулярку,
так как благодаря строке: my $word = "(?:$atom|$quoted_string)";
она матчит ещё и такие адреса: "user name" <username@domain_name>
Я им в далеком '99 пользовался, чтобы зароучивать почту непосредственно на внутриконторские машины, а не на общий мейлсервер.
Вот регулярка матчит только адреса типа:
[email protected]
^(?:[^()<>@,;:\\".\[\] \000-\037\177*&]+)(?:\.(?:[^()<>@,;:\\".\[\] \000-\037\177*&]+))*@(?:[^()<>@,;:\\".\[\] \000-\037\177*&]+)(?:\.(?:[^()<>@,;:\\".\[\] \000-\037\177*&]+))*$
лучше бы у WebKillа поучились
if (mail=="e-mail*" || mail.length<7) { error_text=error_text+"Введитье корьектный e-mail \n" }
в одну строчку сделал, а вы с какими-то своими РФС-822
Нужность или ненужность фигурных скобок определяется исключительно соглашениями или принятыми стандартами оформления кода. Аналогично количеству табуляций в отступах и символе табуляций.
Часто можно встретить его искренние и удивлённые высказывания, чуть ли не в каждом куске кода он узнаёт perl стиль...
Бывает ведь...
У меня из-за таких людей на каждом третьем ресурсе почту типа [email protected] зарубают. Говорят, что неправильный адрес, что б они понимали в неправильных адресах!
if (...) {return true;} else {return false;}
Зря на PHP перешли, такие программисты на Perl важнее.
Вот регулярка матчит только адреса типа:
[email protected]
^(?:[^()<>@,;:\\".\[\] \000-\037\177*&]+)(?:\.(?:[^()<>@,;:\\".\[\] \000-\037\177*&]+))*@(?:[^()<>@,;:\\".\[\] \000-\037\177*&]+)(?:\.(?:[^()<>@,;:\\".\[\] \000-\037\177*&]+))*$