validar unico regulares regular para expresiones expresion espacio electronico direccion correo casa blanco alfanumerico regex email

regex - unico - expresiones regulares



regex para validación de correo electrónico (9)

He escrito la expresión regular a continuación para una validación de correo electrónico realmente simple. Planeo enviar un enlace de confirmación.

/.*@[a-z0-9.-]*/i

Sin embargo, me gustaría mejorarlo desde el estado actual porque una cadena como esta no produce el resultado deseado:

prueba, my.name + test @ gmail-something.co.uk, prueba

La parte de "prueba" está indeseablemente incluida en el partido. Experimenté con los límites de las palabras sin éxito.

  1. ¿Cómo debo modificar?
  2. Aunque lo he mantenido simple, ¿hay algún formato válido de correo electrónico que excluya?

¡GRACIAS!



Casi nada de lo que usa es lo suficientemente breve como para tener sentido, ya que VERDADMENTE validará una dirección de correo electrónico. Habiendo dicho eso, esto es lo que uso habitualmente:

^/w+([-+.'']/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*$

En realidad, es la expresión regular incorporada para el validador de expresiones regulares de ASP.NET para direcciones de correo electrónico.

NOTA: muchas de las expresiones regulares proporcionadas en este hilo PUEDEN haber funcionado en los 90, pero se permite que los TLD tengan menos de 2 caracteres y más de 4 caracteres en el entorno web actual. Por ejemplo, [email protected] ES una dirección de correo electrónico válida porque .museum es uno de esos nuevos TLD largos.


Descubrí que en lugar de hacer coincidir toda la dirección de correo electrónico con una expresión regular, es mucho más práctico simplemente dividir la cadena en el @ y:

  • Primero verifique los registros MX o A existentes de la parte del dominio a través de una biblioteca DNS.
  • Luego verifique la parte local (la parte del lado izquierdo de la @) contra una expresión regular más simple.

La razón para hacer la verificación de DNS es que las direcciones de correo electrónico inalcanzables, aunque sean compatibles con RFC, no valen nada. La razón para verificar adicionalmente el registro A es que se usan para determinar a dónde enviar el correo cuando no se encuentra un registro MX. (ver RFC2821, 3.6)

Otros consejos:

  • Use una robusta biblioteca de resolución de DNS, no lance la suya. Pruébalo contra grandes compañías. A veces tienen una gran cantidad de servidores de correo, lo que puede generar problemas. He visto una biblioteca defectuosa en bmw.com. Solo digo. :)

En lugar de . intente hacer coincidir todos los caracteres excepto / s (espacio en blanco):

/[^/s]*@[a-z0-9.-]*/i


Jeffrey Friedl da una expresión regular para validar direcciones de correo electrónico en su libro Mastering Regular Expressions. Es enorme, pero funciona bien.



Una expresión regular de dos pasos más pequeña proporciona buenos resultados

/ ** verifique si la dirección de correo electrónico está en un formato válido. * El carácter principal del buzón debe ser alfa
* caracteres restantes alfanuméricos más -_ y punto
* la base de dominio debe tener al menos 2 caracteres
* la extensión de dominio debe ser de al menos 2, no más de 4 alfa
* Los subdominios están permitidos. * @version 050208 agregó apóstrofo como válida char * @version 25/04/07 dirección de correo electrónico de una sola letra y único
* nombres de dominio de letras están permitidos. * / public static boolean isValidEmailAddress (String address) {String sRegExp;

// 050208 using the literal that was actually in place // 050719 tweaked // 050907 tweaked, for spaces next to @ sign, two letter email left of @ ok // 042507 changed to allow single letter email addresses and single letter domain names // 080612 added trap and unit test for two adjacent @signs sRegExp = "[a-z0-9#$%&]" // don''t lead with dot + "[a-z0-9#$%&''//.//-_]*" // more stuff dots OK + "@[^//.//s@]" // no dots or space or another @ sign next to @ sign + "[a-z0-9_//.//-_]*" // may or may not have more character + "//.[a-z]{2,4}"; // ending with top level domain: com,. biz, .de, etc. boolean bTestOne = java.util.regex.Pattern.compile( sRegExp, java.util.regex.Pattern.CASE_INSENSITIVE).matcher(address).matches(); // should this work ? boolean bTwoDots = java.util.regex.Pattern.compile("//.//.", // no adjacent dots java.util.regex.Pattern.CASE_INSENSITIVE).matcher(address).find(); boolean bDotBefore = java.util.regex.Pattern.compile("[//.//s]@", //no dots or spaces before @ java.util.regex.Pattern.CASE_INSENSITIVE).matcher(address).find(); return bTestOne && !bTwoDots && !bDotBefore; } // end IsValidEmail



esto viene de Regex Buddy (definitivamente una necesidad de comprar prog!)

/b[A-Z0-9._%+-]+@[A-Z0-9.-]+/.[A-Z]{2,6}/b