Как я могу подтвердить, что входное значение является действительным адресом электронной почты, используя php5. Теперь я использую этот код
function isValidEmail($email){
$pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$";
if (eregi($pattern, $email)){
return true;
}
else {
return false;
}
}
но он показывает устаревшую ошибку. Как я могу исправить эту проблему. Пожалуйста, помогите мне.
php
regex
validation
email-validation
ученик
источник
источник
eregi
являются функцией) не рекомендуется. Вместо этого используйте PCRE .Ответы:
Вы можете использовать эту
filter_var()
функцию, которая дает вам множество удобных вариантов проверки и очистки.Руководство PHP filter_var ()
Доступно в PHP> = 5.2.0
Если вы не хотите менять свой код, который зависит от вашей функции, просто выполните:
Примечание . Для других целей (где вам нужно Regex) устаревшее
ereg
семейство функций (POSIX Regex Functions) следует заменитьpreg
семейством ( PCRE Regex Functions ). Есть небольшое количество отличий, достаточно прочитать Руководство.Обновление 1 : как указано @binaryLV :
Эта ошибка уже исправлена.
Обновление 2 : этот метод, конечно же, будет подтвержден
bazmega@kapa
как действительный адрес электронной почты, потому что на самом деле это действительный адрес электронной почты. Но большая часть времени в Интернете, вы также хотите, чтобы адрес электронной почты , чтобы иметь TLD:bazmega@kapa.com
. Как предлагается в этом сообщении в блоге (ссылка размещена @Istiaque Ahmed ), вы можете дополнитьfilter_var()
его регулярным выражением, которое будет проверять наличие точки в части домена ( хотя не проверяет действительный TLD):Как отметил @Eliseo Ocampos , эта проблема существует только до PHP 5.3, в этой версии они изменили регулярное выражение, и теперь он выполняет эту проверку, поэтому вам не нужно.
источник
eregi
, похоже, он использует PHP 5.3. Но да, это важно упомянуть (для других)).FILTER_VALIDATE_EMAIL
, которая приводила к segfault при проверке больших значений. Простой и безопасный способ решения этой проблемы - использоватьstrlen()
ранееfilter_val()
. Я не уверен насчет финальной версии 5.3.4, но написано, что некоторые версии моментальных снимков 5.3.4 также были затронуты.filter_val
илиfilter_var
?См. Примечания на http://www.php.net/manual/en/function.ereg.php :
источник
Это старый пост, но я поделюсь одним своим решением, потому что никто раньше не упоминал здесь ни одной проблемы.
Новый адрес электронной почты может содержать символы UTF-8 или специальные доменные имена, например
.live
,.news
и т. Д.Также я обнаружил, что некоторые адреса электронной почты могут быть на кириллице и во всех случаях стандартными регулярными выражениями или
filter_var()
не работают .Вот почему я нашел решение:
Эта функция отлично работает для всех дел и форматов электронной почты.
источник
Я всегда использую это:
источник
alex@.
она всегда возвращает истину, если это недействительный адрес электронной почты.Держитесь подальше от
regex
иfilter_var()
решения для проверки электронной почты. См. Этот ответ: https://stackoverflow.com/a/42037557/953833источник
Использование:
источник
Перед проверкой адреса электронной почты: сначала удалите из электронной почты все недопустимые символы.
после этого подтвердите свой адрес электронной почты с помощью этой
filter_var()
функции.Например,
источник