¿Cómo puedo validar que el valor de entrada es una dirección de correo electrónico válida usando php5. Ahora estoy usando este código
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;
}
}
pero muestra un error obsoleto. ¿Cómo puedo solucionar este problema? Por favor, ayúdame.
php
regex
validation
email-validation
aprendiz
fuente
fuente
eregi
es una función de) está en desuso. Utilice PCRE en su lugar.Respuestas:
Puede usar la
filter_var()
función, que le brinda muchas opciones útiles de validación y desinfección.PHP manual filter_var ()
Disponible en PHP> = 5.2.0
Si no desea cambiar su código que se basó en su función, simplemente haga:
Nota : Para otros usos (donde necesite Regex), la
ereg
familia de funciones obsoletas (POSIX Regex Functions) debe ser reemplazada por lapreg
familia ( PCRE Regex Functions ). Hay una pequeña cantidad de diferencias, leer el manual debería ser suficiente.Actualización 1 : como lo señaló @binaryLV :
Este error ya se ha solucionado.
Actualización 2 : Este método, por supuesto, validará
bazmega@kapa
como una dirección de correo electrónico válida, porque de hecho es una dirección de correo electrónico válida. Pero la mayor parte del tiempo en Internet, también se desea que la dirección de correo electrónico y tiene un TLD:[email protected]
. Como se sugiere en esta publicación de blog (enlace publicado por @Istiaque Ahmed ), puede aumentarfilter_var()
con una expresión regular que verificará la existencia de un punto en la parte del dominio ( aunque no verificará un TLD válido ):Como señaló @Eliseo Ocampos , este problema solo existe antes de PHP 5.3, en esa versión cambiaron la expresión regular y ahora hace esta verificación, por lo que no es necesario.
fuente
eregi
, parece que está usando PHP 5.3. Pero eso sí, es importante mencionarlo (para otros)).FILTER_VALIDATE_EMAIL
, que resultó en segfault al validar valores grandes. La solución alternativa simple y segura para esto se está utilizandostrlen()
antesfilter_val()
. No estoy seguro acerca de 5.3.4 final, pero está escrito que algunas versiones de instantáneas 5.3.4 también se vieron afectadas.filter_val
ofilter_var
?Consulte las notas en http://www.php.net/manual/en/function.ereg.php :
fuente
Esta es una publicación antigua, pero compartiré una de mi solución porque nadie mencionó aquí un problema antes.
La nueva dirección de correo electrónico puede contener caracteres UTF-8 o nombres de dominio especiales como
.live
,.news
etc.También encuentro que algunas direcciones de correo electrónico pueden estar en cirílico y en todos los casos expresiones regulares estándar o
filter_var()
fallarán.Por eso hice una solución para ello:
Esta función funciona perfectamente para todos los casos y formatos de correo electrónico.
fuente
Yo siempre uso esto:
fuente
alex@.
, siempre devuelve verdadero cuando no es una dirección de correo electrónico válida.Manténgase alejado de
regex
yfilter_var()
soluciones para la validación de correo electrónico. Vea esta respuesta: https://stackoverflow.com/a/42037557/953833fuente
Utilizar:
fuente
Antes de la validación del correo electrónico: primero debe eliminar todos los caracteres ilegales del correo electrónico.
después de eso, valide su dirección de correo electrónico utilizando esta
filter_var()
función.Por ejemplo
fuente