Quiero hacer coincidir una cadena alfanumérica de longitud específica con al menos una letra y al menos un dígito.
Por ejemplo, adfyg43 2 debe contener caracteres alfabéticos y dígitos y la longitud debe comenzar desde 8.
Usé esta expresión pero no funcionará:
^([A-Za-z]{1,}\d{1,}){8,}$Su patrón actual repite un grupo 8 o más veces. Ese grupo por sí mismo coincide con 1 o más caracteres az seguidos de 1 o más dígitos.
Eso significa que la longitud mínima de la cadena que debe coincidir es de 16 caracteres en pares de al menos 2. Entonces, por ejemplo, una cadena como a1aa1a1a1a1a1a1a1 coincidiría.
Puede escribir el patrón utilizando 2 aserciones anticipadas para afirmar una longitud de al menos 8 y afirmar al menos un carácter az.
Luego haga coincidir al menos un dígito. Usando una coincidencia que no distingue entre mayúsculas y minúsculas:
^(?=[az\d]{8,}$)(?=\d*[az])[az]*\d[az\d]*$En partes, el patrón coincide:
^ Comienzo de cadena(?=[az\d]{8,}$) Búsqueda anticipada positiva, afirmación de 8 o más caracteres az o dígitos hasta el final de la cadena(?=\d*[az]) Anticipación positiva para afirmar al menos un carácter az[az]* Coincide con los caracteres opcionales az\d Coincide con al menos un solo dígito[az\d]* Coincidencia de caracteres opcionales az o dígitos$ Fin de la cadenaDemostración de expresiones regulares
const regex = /^(?=[az\d]{8,}$)(?=\d*[az])[az]*\d[az\d]*$/i; [ "AdfhGg432", "Abc1aaa" ].forEach(s => console.log(`Match "${s}": ${regex.test(s)}`) )