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
Форумы портала PHP.SU :: Версия для печати :: Регулярка для проверки email
Форумы портала PHP.SU » » Вопросы новичков » Регулярка для проверки email

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

1. Roman4eg - 04 Мая, 2020 - 20:23:51 - перейти к сообщению
Всем привет. Пытаюсь с помощью регулярки сделать проверку на валидность для введённого адреса электронной почты.

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

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? Буду очень благодарен.
2. Мелкий - 04 Мая, 2020 - 20:55:12 - перейти к сообщению

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

А что-то более правдоподобное - есть оооочень длинная штатная регулярка под капотом filter_var
PHP:
скопировать код в буфер обмена
  1. filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)
3. Roman4eg - 04 Мая, 2020 - 21:56:00 - перейти к сообщению
Спасибо. Склоняюсь к тому, что проверки на '@' будет достаточно...
4. LIME - 08 Мая, 2020 - 17:16:35 - перейти к сообщению
можешь добавить проверку реальности почтового сервиса
https://www.php.net/manual/ru/fu...tion.getmxrr.php
5. Lolya - 29 Мая, 2020 - 09:54:44 - перейти к сообщению
Как вариант.
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>");

 

Powered by ExBB FM 1.0 RC1