Por lo tanto, hay una tarea para hacer coincidir los correos electrónicos en una entrada contra ciertas condiciones. La mayoría de ellos se cumplen. Todos ellos, en realidad, excepto uno.
Por lo tanto, los correos electrónicos de los usuarios deben tener hasta 30 caracteres, pero no pueden tener menos de 6 solo para los usuarios de Gmail (la parte antes de la @). Otros tipos de correo electrónico pueden tener correos electrónicos aún más cortos.
¡Por favor, ayúdenme a encontrar una expresión regular correcta!
Mi actual es:
^((?!.*?\.\.)[a-zA-Z0-9\.]{1,30})\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})$Usando una coincidencia que no distingue entre mayúsculas y minúsculas, podría escribir el patrón como:
^(?!.*?\.\.)(?:[a-zA-Z0-9.]{1,30}@(?!gmail\.com$)(?:[a-zA-Z0-9-]+\.)+[a-zA-Z0-9]{2,4}|[a-zA-Z0-9.]{6,30}@gmail\.com)$El patrón coincide:
^ Comienzo de cadena(?!.*?\.\.) Afirmar no .. a la derecha(?: Grupo de no captura para las 2 alternativas[a-z0-9.]{1,30} Coincide con 1-30 caracteres especificados en la clase de caracteres@(?!gmail\.com$) Coincidir con @ y afirmar no seguido por gmail.com(?:[a-z0-9-]+\.)+[a-z0-9]{2,4} Coincide con 1+ repeticiones de la clase de carácter y . y haga coincidir 2-4 caracteres de la segunda clase de caracteres| O[a-zA-Z0-9.]{6,30}@gmail\.com) Cerrar grupo de no captura$ Fin de la cadenaDemostración de expresiones regulares
const regex = /^(?!.*?\.\.)(?:[a-zA-Z0-9.]{1,30}@(?!gmail\.com$)(?:[a-zA-Z0-9-]+\.)+[a-zA-Z0-9]{2,4}|[a-zA-Z0-9.]{6,30}@gmail\.com)$/i; [ "testing@test.com", "t@gmail.com", "t@test.com", "testing@gmail.com" ].forEach(s => console.log(`${s} --> ${regex.test(s)}`));Una forma un poco más corta de escribirlo podría ser afirmar no 1-5 caracteres antes de gmail.com:
^(?!.*?\.\.)(?![a-z0-9.]{1,5}@(?=gmail\.com$))[a-z0-9.]+@(?:[a-z0-9-]+\.)+[a-zA-Z0-9]{2,4}$