Этот урок покажет, как осуществить проверку e-mail. Когда вы регистрируетесь на сайте, как правило, ваш e-mail проверяется на верность введенного формата. Это делается с помощью регулярных выражений. Что нам нужно сделать, так это проверить строку (например, $email) на совпадение с регулярным выражениям:
ereg("^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]", $email);
На данный момент происходит только проверка строки ($email), и абсолютно ничего не выводится. Следующим шагом будет написание IF утверждения, которое будет возвращать булевое значение, если строка не будет совпадать с регулярными выражениями.
if (eregi("^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]", $email))
{
return FALSE;
}
Это основная часть проверки, но теперь мы можем её улучшить. Мы проверим доменное имя, которое находится после символа @: используем MX-запись и, если 25 порт открыт, то будем считать, что домен существует.
list($Username, $Domain) = split("@",$email);
if(getmxrr($Domain, $MXHost))
{
return TRUE;
}
else
{
if(fsockopen($Domain, 25, $errno, $errstr, 30))
{
return TRUE;
}
else
{
return FALSE;
}
}
Теперь, чтобы закончить урок, мы соединим эти 2 части кода в одну функцию, чтобы мы смогли ей воспользоваться многократно. Если вы не понимаете код, то проигнорируйте все, что было сказано выше, и просто скопируйте этот код:
function checkEmail($email)
{
if(eregi("^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]", $email))
{
return FALSE;
}
list ($Username, $Domain) = split («@»,$email);
if (getmxrr ($Domain, $MXHost))
{
return TRUE;
}
else
{
if (fsockopen ($Domain, 25, $errno, $errstr, 30))
{
return TRUE;
}
else
{
return FALSE;
}
}
}
Это все, что нам необходимо. Чтобы проверить e-mail, вызываем следующую функцию:
if(checkEmail(mail@example.com) == FALSE)
{
echo "E-mail не верный";
}
else
{
echo "E-mail верный";
}
Это все. Вы можете заменить mail@example.com на любой, какой вам нравится.
Перевод: http://www.4webmaster.ru/
Рекомендуем почитать:
• Стильные курсоры
• Особенности ссылок «вверх страницы»
• Генератор паролей
12 комментариев
Слишком слабо, чтобы называться уроком.
Во-первых, разве нельзя до символа «@» использовать точки в адресах электронной почты? С такой проверкой email abc.def@mail.ru будет неверным.
Во-вторых, зачем писать шаблон [a-zA-Z] в функцию eregi? Ведь она регистронезависима.
В-третьих, по-вашему вызов подобный функции:
checkEmail (mail@example.com)
вернет что-то кроме ошибки? Тогда вы ошибаетесь, потому как нужно писать так: checkEmail («mail@example.com»)
вот если кто скажет
почему на адреса типа
some@mail.ru
проверка не идёт
а на
@gmail.com
идёт
то буду рад
Потому что функция написана настолько криво, что возращает значение прямо противиположное нужному. Точнее регулярное выражение отсекает все правильные адреса. Т.к. eregi вернет true в случае успешной проверки, а в примере в этом случае функция возращает false
А не проще ли обойтись без регулярных выражений, как например тутjs-php.ru/web-development... -without-regexp/
if (eregi ([a-z0-9]«@», $email)) {
echo «Все путем»;
}
else{
echo «idika tu nahui»;
}
Чесно говоря у меня не заработал ващ код, я накидал свой, так что бы был.
ВОТ потестил без @ и если будут русские символы посылает, аесли с @ и латинскими и цифрами и даже если есть точка все нормально.
Если по написанию 'list ($U, $Dom) = split ('@', 'mail@example.com')' в переменную $Dom массива вернется example.com
Разве можно через fsockopen зайти в example.com на 25 port??????????. НЕЛЬЗЯ. Токо с приставкой что-то типа smtp.
А лучше взять 80 порт
P.S Действительно через ж... написано
Блин, горе программисты. Я еще могу понять, когда такие вещи пишут на perl или JS. Там как бы без вариантов. Но зачем? _ЗАЧЕМ_ делать такие вещи на PHP?
Или религия не позволяет изучить язык?
$mail = filter_var ($mail, FILTER_VALIDATE_EMAIL);
if (!eregi («^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$», $email))
{
ошибка ввода емейла
}else{
все прально
}
Вот так вроде работает прально
— Злобный глухой слон
Спасибо !Огромненьшее...)))
Злобный глухой слон, молодца!
Автору поста спасибо за первую позицию в Google.
А вот пользоваться функцией eregi — моветон. Ибо она уже в статусе depricated — устаревшая? может быть выкинута из функионала в любой из следующих версий php/ Учите матчасть и код пишите сами!
Делаю сейчас регистрацию по e-mail для своего личного сайта, так что валидация e-mail интересовала. Код из этой статьи не пошел. А вот Злобному глухому слону — огромное спасибо! Его вариант хорошо работает!
Постепенно обрастаю новыми знаними по PHP:)
Оставить комментарий: