Pregunta
¿Cómo validar un email con PHP y expresiones regulares?
Responder esta pregunta por maikel el 2009-08-25
Tengo un script en PHP para validar un correo electrónico que funcionó correctamente hasta que un usuario introdujo una dirección del tipo
Otra más compleja dada por Cal Henderson en http://iamcal.com/publish/articles/php/parsing_email/
¿Alguien conoce de una expresión regular o script que resuelva este caso?
usuario@dominio.co.uk
xxx.com.cn
xxx.co.uk
identificándola como no válida. Ya he probado con varias expresiones regulares bastante complejas y que están supuestamente acorde a los estándares pero el resultado es el mismo.
function valida_email($email) {
$re= '#^[a-z0-9.!\#$%&\'*+-/=?^_`{|}~]+@([0-9.]+|([^\s]+\.+[a-z]{2,6}))$#si';
return preg_match($re, $email);
}
Otra más compleja dada por Cal Henderson en http://iamcal.com/publish/articles/php/parsing_email/
$re = '/^([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-'
.'\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c\x00-'
.'\x7f)*\x22)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-'
.'\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80'
.'-\xff]|\x5c\x00-\x7f)*\x22))*\x40([^\x00-\x20\x22\x28\x29'
.'\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^'
.'\x0d\x5b-\x5d\x80-\xff]|\x5c\x00-\x7f)*\x5d)(\x2e([^\x00-'
.'\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-'
.'\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c\x00-\x7f)*'
.'\x5d))*$/'
;
¿Alguien conoce de una expresión regular o script que resuelva este caso?
Respuestas
Finalmente resolví añadiendo una porción al final de la expresión regular que había usado resultando:
Sin embargo, no estoy convencido de que sea la solución más acertada.
$re= '#^[a-z0-9.!\#$%&\'*+-/=?^_`{|}~]+@([0-9.]+|([^\s]+\.+[a-z]{2,6}))(\.[a-z]{2,6})?$#si';
Sin embargo, no estoy convencido de que sea la solución más acertada.
por maikel el 2009-08-25
"/^[_A-z0-9-]+((\.|\+)[_A-z0-9-]+)*@[A-z0-9-]+(\.[A-z0-9-]+)*(\.[A-z]{2,4})$/"
por Anónimo el 2009-09-05



