Quiero expresiones regulares que pueden cumplir con el siguiente requisito:
Hemos intentado esto pero no funciona como esperábamos: (^[AZ]{1,2}[0-9]{5,8}$)|(^[AZ]{1}[0-9]{4,8}[AZ]{1}$)|(^[0-9]{4,8}[AZ]{1,2}$)|([^AZ]{3}[0-9]{6,9})
¿Alguien puede ayudarme a resolverlo?
Gracias
Puede afirmar que la longitud de la cadena es de 6 a 10 caracteres.
Luego haga coincidir al menos un solo carácter [AZ] entre dígitos opcionales y, opcionalmente, haga coincidir un segundo carácter [AZ] entre dígitos opcionales.
^(?=[AZ\d]{6,10}$)\d*[AZ](?:\d*[AZ])?\d*$^ Comienzo de cadena(?=[AZ\d]{6,10}$) Búsqueda anticipada positiva para afirmar 6-10 ocurrencias de AZ o un dígito\d*[AZ] Coincide con dígitos opcionales y luego coincide con el primer [AZ](?:\d*[AZ])? Opcionalmente, haga coincidir dígitos opcionales y el segundo [AZ]\d* Coincidir con dígitos opcionales$ Fin de la cadenaVea una demostración de expresiones regulares .
Una opción es usar la siguiente expresión regular:
^(?=.*[az])(?!(?:.*[az]){3})[az\d]{6,10}$ con el indicador de mayúsculas y minúsculas i configuré.
Esta expresión dice: "Haga coincidir el principio de la cadena, afirme que la cadena contiene al menos una letra, afirme que la cadena no contiene tres letras y afirme que la cadena contiene de 6 a 10 caracteres, todos ellos letras o números".
Las diversas partes de la expresión tienen las siguientes funciones.
^ # match the beginning of the string (?= # begin a positive lookahead .*[az] # match zero or more characters and then a letter ) # end positive lookahead (?! # begin a negative lookahead (?: # begin a non-capture group .*[az] # match zero or more characters and then a letter ){3} # end non-capture group and execute it 3 times ) # end negative lookahead [az\d]{6,10} # match 6-10 letters or digits $ # match end of stringTenga en cuenta que ninguna de las búsquedas anticipadas avanza el puntero de cadena mantenido por el motor de expresiones regulares desde el principio de la cadena.