Intereting Posts
Обновить всю страницу по запросу Ajax Как поместить данные HTML в заголовок tcpdf? Получить переменную из файла PHP с помощью JQuery / AJAX Вызов неопределенной функции curl_init () Изучение OO-кодирования с помощью PHP, статические! = Выражения, но в руководстве PHP говорится, что все, что имеет значение, является выражением, смущенным PHP и Codeigniter – Как вы проверяете, существует ли модель и / или не выдает ошибку? Как перемещаться по всем пикселям изображения? Как отправить изображение base64 через ajax Необходимое поле (ы) отсутствует результат Включить целое содержимое файла и повторить его Удалите часть строки, но только когда она находится в конце строки Как получить данные из конфигурации Magento Проблема с URL-адресом API SOAP Google отправка пользователю mesage путем передачи их идентификатора в модальный блок Получить название из ссылки, PHP Простой HTML DOM Parser

Как проверить электронную почту на PHP?

Как проверить правильность введенного значения – это действительный адрес электронной почты, используя php5. Теперь я использую этот код

function isValidEmail($email){ $pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[az]{2,3})$"; if (eregi($pattern, $email)){ return true; } else { return false; } } 

но он показывает устаревшую ошибку. Как я могу исправить эту проблему. Пожалуйста, помогите мне.

Вы можете использовать filter_var() , которая дает вам много полезных параметров проверки и дезинфекции.

 filter_var($email, FILTER_VALIDATE_EMAIL) 
  • PHP Manual filter_var ()

  • Доступно в PHP> = 5.2.0

Если вы не хотите изменять свой код, который полагался на вашу функцию, просто выполните:

 function isValidEmail($email){ return filter_var($email, FILTER_VALIDATE_EMAIL) !== false; } 

Примечание . Для других целей (где вам нужно Regex) семейство устаревших семейств ereg функции ereg POSIX) должно быть заменено семейством ereg функции ereg PCRE ). Есть небольшое количество различий, достаточно прочитать Руководство.

Обновление 1 : Как указано @binaryLV :

В PHP 5.3.3 и 5.2.14 была ошибка, связанная с FILTER_VALIDATE_EMAIL, что привело к segfault при проверке больших значений. Простым и безопасным обходным путем для этого является использование strlen() перед filter_var() . Я не уверен в финале 5.3.4, но написано, что некоторые версии 5.3.4-снимок также были затронуты.

Эта ошибка уже исправлена.

Обновление 2 : этот метод, разумеется, проверяет bazmega@kapa как действительный адрес электронной почты, потому что на самом деле это действительный адрес электронной почты. Но большую часть времени в Интернете вы также хотите, чтобы на адрес электронной почты был TLD: bazmega@kapa.com . Как было предложено в этом сообщении в блоге (ссылка, отправленная @Istiaque Ahmed ), вы можете увеличить filter_var() с регулярным выражением, которое будет проверять наличие точки в части домена (не будет проверять действительный TLD):

 function isValidEmail($email) { return filter_var($email, FILTER_VALIDATE_EMAIL) && preg_match('/@.+\./', $email); } 

Как отметил @Eliseo Ocampos , эта проблема существует только до PHP 5.3, в этой версии они изменили регулярное выражение, и теперь он делает эту проверку, так что вам этого не нужно.

См. Примечания по адресу http://www.php.net/manual/en/function.ereg.php :

 Note: 

Начиная с PHP 5.3.0, расширение регулярного выражения устарело в пользу расширения PCRE . Вызов этой функции выдает уведомление E_DEPRECATED. См. Список различий в помощи при конвертации в PCRE.

 Note: 

preg_match () , который использует синтаксис регулярных выражений, совместимый с Perl, часто является более быстрой альтернативой ereg ().

Это старый пост, но я поделюсь одним моим решением, потому что никто не упоминает об этой проблеме раньше.

Новый адрес электронной почты может содержать символы UTF-8 или специальные доменные имена, такие как .live , .news и т. Д.

Также я обнаружил, что какой-то адрес электронной почты может быть на кириллице, и во всех случаях стандартное регулярное выражение или filter_var() будет выполнено.

Вот почему я сделал для этого решение:

 function valid_email($email) { if(is_array($email) || is_numeric($email) || is_bool($email) || is_float($email) || is_file($email) || is_dir($email) || is_int($email)) return false; else { $email=trim(strtolower($email)); if(filter_var($email, FILTER_VALIDATE_EMAIL)!==false) return $email; else { $pattern = '/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[az][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD'; return (preg_match($pattern, $email) === 1) ? $email : false; } } } 

Эта функция отлично работает для всех случаев и форматов электронной почты.

Я всегда использую это:

 function validEmail($email){ // First, we check that there's one @ symbol, and that the lengths are right if (!preg_match("/^[^@]{1,64}@[^@]{1,255}$/", $email)) { // Email invalid because wrong number of characters in one section, or wrong number of @ symbols. return false; } // Split it into sections to make life easier $email_array = explode("@", $email); $local_array = explode(".", $email_array[0]); for ($i = 0; $i < sizeof($local_array); $i++) { if (!preg_match("/^(([A-Za-z0-9!#$%&'*+\/=?^_`{|}~-][A-Za-z0-9!#$%&'*+\/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$/", $local_array[$i])) { return false; } } if (!preg_match("/^\[?[0-9\.]+\]?$/", $email_array[1])) { // Check if domain is IP. If not, it should be valid domain name $domain_array = explode(".", $email_array[1]); if (sizeof($domain_array) < 2) { return false; // Not enough parts to domain } for ($i = 0; $i < sizeof($domain_array); $i++) { if (!preg_match("/^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$/", $domain_array[$i])) { return false; } } } return true; } 

Держитесь подальше от regex и filter_var() решений для проверки электронной почты. См. Этот ответ: https://stackoverflow.com/a/42037557/953833