Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Регулярка для проверки email

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Roman4eg
Отправлено: 04 Мая, 2020 - 20:23:51
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Апр. 2020  


Помог: 0 раз(а)




Всем привет. Пытаюсь с помощью регулярки сделать проверку на валидность для введённого адреса электронной почты.

Начал с простого:

CODE (htmlphp):
скопировать код в буфер обмена
  1. if (!preg_match("/[0-9a-z]+@[a-z]/", $str)) {
  2.     echo "Не правильно введён адрес электронной почты!";
  3.     }


далее в сети нашёл ещё примеры и каждый сложнее предыдущего:

CODE (htmlphp):
скопировать код в буфер обмена
  1. if (!preg_match(
  2.         '/^((([0-9A-Za-z]{1}[-0-9A-z\.]{1,}[0-9A-Za-z]{1})|([0-9А-Яа-я]{1}[-0-9А-я\.]{1,}[0-9А-Яа-я]{1}))@([-0-9A-Za-z]{1,}\.){1,2}[-A-Za-z]{2,})$/u', $str) . '<br/>'){
  3.         echo "Не правильно введён адрес электронной почты!";
  4. }
  5.  


В итоге окончательно запуталcя.

Может кто сталкивался уже, на что в первую очередь надо делать провреку? По задумке надо отсеять те email, на которые нельзя отправить письмо и не потерять нормальные.
Может у кого то есть пример нормальной работающей регулярки для проверки email? Буду очень благодарен.
 
 Top
Мелкий Супермодератор
Отправлено: 04 Мая, 2020 - 20:55:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)





И это даже не совсем шутка. Если изучать соответствующие стандарты - бывает проще проверить что есть символ @.

А что-то более правдоподобное - есть оооочень длинная штатная регулярка под капотом filter_var
PHP:
скопировать код в буфер обмена
  1. filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)


-----
PostgreSQL DBA
 
 Top
Roman4eg
Отправлено: 04 Мая, 2020 - 21:56:00
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Апр. 2020  


Помог: 0 раз(а)




Спасибо. Склоняюсь к тому, что проверки на '@' будет достаточно...
 
 Top
LIME
Отправлено: 08 Мая, 2020 - 17:16:35
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




можешь добавить проверку реальности почтового сервиса
https://www.php.net/manual/ru/fu...tion.getmxrr.php
 
 Top
Lolya
Отправлено: 29 Мая, 2020 - 09:54:44
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018  


Помог: 2 раз(а)




Как вариант.
CODE (htmlphp):
скопировать код в буфер обмена
  1. function bark($msg){?><html><head><meta http-equiv='refresh' content='8;url=/'></head>
  2. <body style="background:black no-repeat center center fixed;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;"><?=stderr("Error", $msg);?></body></html><?}
  3. function validemail($email){return filter_var($email, FILTER_VALIDATE_EMAIL);}
  4. function mail_possible($email){list(, $domain) = explode('@', $email);
  5. if(function_exists('checkdnsrr'))return checkdnsrr($domain, 'MX');else return true;}
  6. $email = trim(strtolower($email));
  7. if(!validemail($email)) bark("<center>It's not like a real email address.</center>");
  8. list(, $domain) = explode('@', $email);
  9. if(!mail_possible($email)) bark("<center>Mail in such a domain can not be (".htmlspecialchars_uni($domain).")</center>");

(Отредактировано автором: 29 Мая, 2020 - 09:56:00)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB