Вы можете использовать эту filter_var()
функцию, которая дает вам множество удобных вариантов проверки и очистки.
filter_var($email, FILTER_VALIDATE_EMAIL)
Если вы не хотите менять свой код, который зависит от вашей функции, просто выполните:
function isValidEmail($email){
return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}
Примечание . Для других целей (где вам нужно Regex) устаревшее ereg
семейство функций (POSIX Regex Functions) следует заменить preg
семейством ( PCRE Regex Functions ). Есть небольшое количество отличий, достаточно прочитать Руководство.
Обновление 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, в этой версии они изменили регулярное выражение, и теперь он выполняет эту проверку, поэтому вам не нужно.
eregi
являются функцией) не рекомендуется. Вместо этого используйте PCRE .