Estoy luchando con un problema en el que necesito verificar que la parte del dominio no debe ser numérica.
Por ejemplo:
abc@123.com -> Inválido
abc@1abc.com -> válido
expresión regular:
^(?=(.{1,64}@.{1,255}))((?!.*?[._]{2})[!#$%&'*+\-\/=?\^_`{|}~a-zA-Z0-9}]{1,64}(\.[!#$%&'*+\-\/=?\^_`{|}~a-zA-Z0-9]{0,}(?<!\.)){0,})@((\[(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}\])|((?!-)(?=.*[a-zA-Z])[a-zA-Z0-9-]{1,63}(?<!-)(\.(?!-)[a-zA-Z0-9-]{1,63}(?<!-)){1,}))$La expresión regular anterior necesita modificación porque hay alguna otra validación que funciona bien con la expresión regular anterior. Lo único pendiente para validar la parte del dominio no debe ser todo numérico.
Actualizado:
Después de investigar un poco sobre la expresión regular anterior, puedo segregar correos electrónicos en diferentes grupos. Ahora, para el grupo 10, debe agregar validación si todos los caracteres en la cadena del grupo 10 son aplha numéricos.
expresión regular:
^(?=(.{1,64}@.{1,255}))((?!.*?[._]{2})[!#$%&'*+\-\/=?\^_`{|}~a-zA-Z0-9}]{1,64}(\.[!#$%&'*+\-\/=?\^_`{|}~a-zA-Z0-9]{0,}(?<!\.)){0,})@((\[(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}\])|((?!-)(?=.*[a-zA-Z])((?:.*[a-zA-Z0-9]))[a-zA-Z0-9-]{0,63}(?<!-)(\.(?!-)[a-zA-Z0-9-]{1,63}(?<!-)){1,}))$Explore la expresión regular en: https://regex101.com/
AIT
No tiene sentido hacer esto: el hecho de que un correo electrónico cumpla con los requisitos establecidos en RFC5322 no significa que sea una dirección de correo electrónico válida: la única forma de saberlo es enviarle un correo electrónico y hacer que el usuario responda. siga un enlace dentro de él o copie un código/token dentro de él.
Dado que tiene que hacerlo de todos modos, eso también solucionará cualquier problema con direcciones de correo electrónico no válidas. Por lo tanto, la validación correcta para el correo electrónico es:
Pattern.compile("^.+@.+\\..+$")(Suponiendo que no quieras solo
y esto hace lo que quiere, que es filtrar las entradas incorrectas obvias, y eso es todo lo que necesita.
Si insiste en continuar con su error, siempre está emailregex.com , que tiene la expresión regular y explica cómo funciona.
NB: Tenga en cuenta que simplemente está equivocado. 12345@678.cde puede ser fácilmente válido: es posible que com no le permita registrar un dominio que consta únicamente de dígitos, pero no es una limitación inherente del sistema DNS: las partes del dominio pueden ser solo números. El dominio de nivel superior no puede serlo, al menos por ahora, pero cualquier otra parte del mismo puede serlo. Por lo tanto, rechazar foo@123.com solo es posible si programa, por TLD, las reglas exactas. Lo que también significa que debe registrarse en la lista de correo de cada operador de TLD para verificar cualquier cambio que realicen. Estarás actualizando esa expresión regular cada dos semanas. ¡Te dije que es una tontería querer hacer!
Puedes usar esto para detectar los inválidos.
^\w+([-+.']\w+)*+@\d+.comsimplemente cambie el .com al postfix que desee.