HTMLeando: para desarrolladores Web

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
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

Thumb_up
Thumb_down

0%
0%
Finalmente resolví añadiendo una porción al final de la expresión regular que había usado resultando:
$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

Thumb_up
Thumb_down

0%
0%
"/^[_A-z0-9-]+((\.|\+)[_A-z0-9-]+)*@[A-z0-9-]+(\.[A-z0-9-]+)*(\.[A-z]{2,4})$/"
por Anónimo el 2009-09-05

Anónimo:   Entrar


Consejo: Sé tan específico y descriptivo como puedas. Comparte tu experiencia personal o tus conocimientos.
Puedes investigar para completar tu respuesta.

Puedes poner directamente trozos de código usando las etiquetas [code=php] y [/code] o incrustar desde Snipplr.com [snippet=id_snippet]

Compartir: WebeameMeneame Delicious Digg

Preguntas relacionadas