Sé que hay muchas preguntas aquí sobre la validación de correo electrónico y RegEx específicos. Me gustaría saber cuáles son las mejores prácticas para validar correos electrónicos con respecto al truco username+anythingelse@gmail.com (detalles aquí). Mi validación actual de RegExp para JavaScript es la siguiente, pero no admite + extra en el identificador:

/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/

¿Hay algún otro servicio que admita + adicional? ¿Debería permitir un + en la dirección o debería alterar el RegEx para permitirlo solo para un correo electrónico con gmail.com o googlemail.com como dominio? Si es así, ¿cuál sería la RegEx alterada?

ACTUALIZACIÓN: Gracias a todos por señalar que + es válido según las especificaciones. No lo sabía y ahora lo sé para el futuro. Para aquellos de ustedes que dicen que es malo incluso usar un RegEx para validarlo, mi razón se basa completamente en un diseño creativo que estoy construyendo. El diseño de nuestro cliente coloca un cheque verde o una X roja al lado de la entrada de la dirección de correo electrónico al difuminarlo. Ese icono indica si es o no una dirección de correo electrónico válida, por lo que debo usar algunos JS para validarla.

7
Mark Ursino 9 dic. 2009 a las 17:00

5 respuestas

La mejor respuesta

+ es un carácter válido en una dirección de correo electrónico. No importa si el dominio no es gmail.com o googlemail.com

Las expresiones regulares no son en realidad una muy buena forma de validar correos electrónicos, pero si solo desea modificar su expresión regular para manejar el plus, cámbielo a lo siguiente:

/^([a-zA-Z0-9_.-\+])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/

Como ejemplo de cómo esta expresión regular no se valida según la especificación: el correo electrónico ..@-.com es válido de acuerdo con ella.

11
Ben S 9 dic. 2009 a las 14:04

Un muy buen artículo sobre este tema Sabía cómo validar una dirección de correo electrónico hasta que leí el RFC

1
Moshe 1 jul. 2010 a las 07:46

Las especificaciones permiten algunas direcciones de correo electrónico feas realmente locas. A menudo me molestan mucho los sitios web que incluso se quejan de direcciones de correo electrónico válidas y perfectamente normales, así que, por favor, trate de no rechazar las direcciones de correo electrónico válidas. Es mejor aceptar algunas direcciones ilegales que rechazar las legales.

Como otros han sugerido, usaría una expresión regular simple como /.+@.+/ y luego enviaría un correo electrónico de verificación. Si es lo suficientemente importante como para validar, es lo suficientemente importante como para verificarlo, porque una dirección de correo electrónico legal aún puede pertenecer a alguien que no sea su visitante. O contener un error involuntario pero fatal.

* Editar: eliminó el punto de la parte del dominio de la expresión regular, porque a@to sigue siendo una dirección de correo electrónico válida. Entonces, incluso mi validación súper simplificada rechazó direcciones válidas. ¿Hay alguna desventaja en aceptar simplemente todo lo que contiene una @ con algo delante y detrás?

2
mcv 26 dic. 2015 a las 10:05

Tendería a ir con algo parecido a /.+@.+\..+/ para verificar si hay errores simples. Luego, enviaría un correo electrónico a la dirección para verificar que realmente existe, ya que la mayoría de los errores tipográficos seguirán teniendo direcciones de correo electrónico válidas sintácticamente.

3
tloach 9 dic. 2009 a las 14:11

Si necesita validar correos electrónicos a través de regexp, entonces lea el estándar o en menos este artículo.

El estándar sugiere usar esta expresión regular:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

Si eso no te asusta, debería :)

5
Aaron Digulla 9 dic. 2009 a las 14:09