Регулярка для емайл. Как добавить домен?

seosniks
На сайте с 13.08.2007
Offline
389
717

Есть рег выражение

echo $mail='Aaa@bnm.ru';

$mail=trim($mail);

if (strlen($mail)==0){echo 'Вы не ввели емайл';}

if (!preg_match('/([A-Za-z0-9\-]{1,9})+\@([A-Za-z0-9\-]{2,9})+(\.[A-Za-z0-9])$/',$mail))

{exit ("<b><b>Ошибка! Email введен не </b>валидный емайл должен быть таким mail@mail.ru mai-ler@mai-lis.ru</b> <a href=\"javascript:history.go(-1);\">Исправить ошибку</a>");}

работает все что до точки .

Но не получаеться добавить .ru точку и зону домена.

тоесть надо добавить приметно это +(\.[A-Za-z0-9]{2,7})

{2,7} это 2,7 буквы.

Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#1

В общем случае мыло может содержать точку в имени и располагаться на поддомене.

Пример регулярки для мыла

/[\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?[\.A-Za-z0-9]{2,}/

http://www.pcre.ru/examples/links/text/32/

У Вас квантификатор + расположен после круглой скобки и не понятно что он выражает.

seosniks
На сайте с 13.08.2007
Offline
389
#2
Алексей Барыкин:
В общем случае мыло может содержать точку в имени и располагаться на поддомене.

Пример регулярки для мыла
/[\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?[\.A-Za-z0-9]{2,}/
http://www.pcre.ru/examples/links/text/32/

У Вас квантификатор + расположен после круглой скобки и не понятно что он выражает.

Алексей! Спасибо.

У меня такой, вопрос почему в первом [\.\-_A-Za-z0-9]

имеются точка \. и символ _

с дефисом понятно имя может иметь вид vas-ya

или же можно и так vas_ya ?

Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#3
seosniks:
Алексей! Спасибо.
У меня такой, вопрос почему в первом [\.\-_A-Za-z0-9]

имеются точка \. и символ _
с дефисом понятно имя может иметь вид vas-ya
или же можно и так vas_ya ?

Подчеркивание в имени - можно.

Вы можете выбрать любое имя, длиной не более 16 символов и состоящее из латинских букв, цифр, знаков подчеркивания ("_"), точки (".") или минус ("-") в любом из четырех доменов: Mail.Ru, Inbox.Ru, List.Ru или BK.Ru. Имя не может начинаться с символов минус ("-"), точка (".") или знака подчеркивания ("_").

http://win.mail.ru/cgi-bin/signup

Коля Дубр
На сайте с 02.03.2005
Offline
153
#4

Вот кусок кода, который мы юзаем, не помню уже, откуда взялся:

public static function validateEmail($address, $use_mxrr_test = false, $use_socket_test = false) {
/** Проверка валидности е-мейла */
if(!preg_match("/^[a-zA-Z0-9_\.-]+@[a-zA-Z0-9\-\.]+\.[a-zA-Z0-9\-\.]+$/", $address)) {
return FALSE;
}
list($Username, $Domain) = split("@",$address);
if($use_mxrr_test) {
if (@getmxrr($Domain, $MXHost)) {
return TRUE;
} else {
return false;
}
}
if ($use_socket_test) {
if(@fsockopen($Domain, 25, $errno, $errstr, 10)) {
return TRUE;
} else {
return FALSE;
}
}
return TRUE;
}

Помимо регулярки умеет проверять хост на существование MX-ов и 25-го порта, но по понятным причинам может тормозить, а в большинстве случаев и регулярки хватает.

Кстати, оформлен дебильно, надо бы переписать :)

Разрабатываю общую шину (http://habrahabr.ru/company/floxim/blog/268467/) помаленьку. ...а еще у меня есть бложек (http://www.blogovo.ru/).
seosniks
На сайте с 13.08.2007
Offline
389
#5
Коля Дубр:
Вот кусок кода, который мы юзаем, не помню уже, откуда взялся:
public static function validateEmail($address, $use_mxrr_test = false, $use_socket_test = false) {

/** Проверка валидности е-мейла */
if(!preg_match("/^[a-zA-Z0-9_\.-]+@[a-zA-Z0-9\-\.]+\.[a-zA-Z0-9\-\.]+$/", $address)) {
return FALSE;
}
list($Username, $Domain) = split("@",$address);
if($use_mxrr_test) {
if (@getmxrr($Domain, $MXHost)) {
return TRUE;
} else {
return false;
}
}
if ($use_socket_test) {
if(@fsockopen($Domain, 25, $errno, $errstr, 10)) {
return TRUE;
} else {
return FALSE;
}
}
return TRUE;
}

Помимо регулярки умеет проверять хост на существование MX-ов и 25-го порта, но по понятным причинам может тормозить, а в большинстве случаев и регулярки хватает.

Кстати, оформлен дебильно, надо бы переписать :)

Спасибо. Да мне супер навороты не нужны.

Хочу к скрипту пределать коменты.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий