Проверка e-mail на валидность!!

  • Автор темы JCarlos
  • Дата начала
Статус
Закрыто для дальнейших ответов.
J

JCarlos

Guest
вот такая вот проблема, помогите люди добрые..

я новичок в регулярных выражениях поэтому:

if (!ereg( "[a-zA-Z0-9]{1,20}@[a-zA-Z0-9]{2,20}.[com,ru,net,org,biz,info,ua]",$email) )
{
//ляляляляля
}

не работает и все тут.. подскажите плиз!
 

v0rbis

selfcoded
Регистрация
02.05.2005
Сообщения
923
ага... и не будет.

вот тебе ответ:

if (!ereg( "^[a-z0-9]+@[a-z0-9]+\.[a-z0-9]{2,4}$", strtolower($email) ) )
{
print "wrong mail!";
}

пояснения:

1) ибо ошибка в символе . которая регекспом воспринимается как любой
одиночный символ... надо \.

2) ну и ост. по мелочи... ^ и $ начало и конец соответственно.

3) знаки + означает повторение того что перед плюсом.

4) ну и оптимизация небольшая.. типа заглавных букв.
 

Creator

Administrator
Команда форума
Регистрация
03.03.2005
Сообщения
1 745
4) ну и оптимизация небольшая.. типа заглавных букв.
Ты забыл сделать самое главное - убрать лишние пробелы:)

А вот мой вариант регулярного выражения:

Код:
if (!preg_match("/^(?:[a-z0-9]+(?:[-_]?[a-z0-9]+)?@[a-z0-9]+(?:\.?[a-z0-9]+)?\.[a-z]{2,5})$/i",trim($email)))
{
 echo "Неверный e-mail!";
}
else echo 'Верный!';
Вариант корректно обрабатывает следующие емайлы:
1) a1sd@as1d.ru
2) sa1d_a1sd@a1sd.ru
3) s1ad-as1d@as1d.ru
4) sa1d1asd@as1d.a1sd.ru
5) as1d-asd@as1d.as1d.ru
6) as1d_asd@a1sd.a1sd.ru

Я думаю, что мой вариант является наиболее оптимальным в плане обработки корректности емайлов. Так же очень легко код можно изменить и расширить число поддерживаемых адресов.

А так советую почитать на сайте про Перл-совместимые регулярные выражения. Если захотите найду точный линк. А так же обязательно читать мануал... я по нему учился:)

И еще, регуляры на перл рулят;) Все учим!
 
J

JCarlos

Guest
спасиба люди добрые. вижу что не зря зашел на форум. спасибо!
 

boryszbn

Новичок
Регистрация
24.07.2007
Сообщения
3
А вот немножко другая задача.
Есть поле в котором пользователь вводит mail и которое проверяется на валидность. Но оно не обязательно для заполнения.
Как это реализовать с помощью регулярных выражений? То-есть, либо поле пустое, либо там корректный mail
 

Doberman

Member
Регистрация
24.10.2006
Сообщения
10
А зачем его проверять на валидность, если он необязателен?
А если хочется, то проще передавать в регулярное выражение мейл, если он не пуст, а если пуст, то пропускать.
Не стоит усложнять регуляры. :)
 

boryszbn

Новичок
Регистрация
24.07.2007
Сообщения
3
В общем, есть обычный регуляр
Код:
^[a-zA-Z0-9\-\._]+@[-a-zA-Z0-9\-]+\.[-a-zA-Z0-9\-\.]+$
Если написать так
Код:
^0|[a-zA-Z0-9\-\._]+@[-a-zA-Z0-9\-]+\.[-a-zA-Z0-9\-\.]+$
то допустимым значением будет либо цифра "0" либо валидный mail. А как сделать чтоб вместо цифры допускалось просто пустое значение?
 

deMone

Злой страшный дядька
Регистрация
30.01.2006
Сообщения
937
А зачем регулярку-то менять?
Код:
if (empty($_POST['email']) or preg_match('регулярко', $_POST['email'])) { всё пучком } else { херня какая-то, а не e-mail }
Быстрее будет.
 

boryszbn

Новичок
Регистрация
24.07.2007
Сообщения
3
А зачем регулярку-то менять?
Это понятно. Я проверку формы делаю с помощью класса oohforms. Выглядит это следующим образом
Код:
require ("../libs/oohforms.inc");
$f=new form;
$f->add_element(array("name"=>"mail",
	"type"=>"text",
	"size"=>"29",
	"valid_e"=>"Некорректный e-mail",
	"valid_regex"=>"^[a-zA-Z0-9\-\._]+@[-a-zA-Z0-9\-]+\.[-a-zA-Z0-9\-\.]+$"));

$f->start('...');
...
$f->show_element('mail');
...
$f->finish();
Вот как тут это сделать я не знаю. Только начал изучать класс...
 

deMone

Злой страшный дядька
Регистрация
30.01.2006
Сообщения
937
Ах, ну, если так, тогда, конечно, непонятно будет. Обращайтесь к документации используемого класса.
 

iNfiUm

Active Member
Регистрация
12.01.2008
Сообщения
35
Очень рад что наткнулся на данный топик. Надеюсь, что меня без помощи не оставите :rolleyes:

Я в этой фишке не сильно понимаю...

Использую:
var email = new RegExp("^([A-Za-z0-9_\-]{1,}[@]{1}[A-Za-z0-9_\-]{1,}([\.]{1}[A-Za-z0-9]{1,}){1,}[;]{0,1}){1,}$");
но оно не пропускает адреса с точкой, например alexey.ivanov@info.ru

Подскажите, как исправить этот момент?

Спасибо.
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Код:
([[:alnum:]-.]+@[[:alnum:]-]+(\\.[[:alnum:]-]+)*
Вот вроде рабочее...
 
Статус
Закрыто для дальнейших ответов.
Верх Низ