javascript - regulares - Patrón Regex para que coincida con al menos 1 número y 1 carácter en una cadena
javascript regex example (7)
Tengo una expresión regular
/^([a-zA-Z0-9]+)$/
esto solo permite caracteres alfanuméricos, pero también si solo inserto número (s) o solo carácter (s), entonces también lo acepta. Quiero que funcione como si el campo solo aceptara valores alfanuméricos, pero el valor debe contener al menos 1 carácter y 1 número.
¿Por qué no aplicar primero la prueba completa y luego agregar pruebas individuales para los personajes y números? De todos modos, si quieres hacerlo todo en una expresión regular, usa un lookahead positivo:
/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/
Esta solución acepta al menos 1 número y al menos 1 carácter:
[^/w/d]*(([0-9]+.*[A-Za-z]+.*)|[A-Za-z]+.*([0-9]+.*))
Este RE hará:
/^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]*$/i
Explicación de RE:
- Haga coincidir cualquiera de los siguientes:
- Al menos un número, luego una letra o
- Al menos una letra, luego un número más
- Cualquier número y letras restantes
-
(?:...)
crea un grupo sin referencia -
/i
es la bandera de ignorar caso , de modo queaz
==a-zA-Z
.
Puedo ver que otros respondedores te han dado una solución completa. El problema con las expresiones regulares es que pueden ser difíciles de mantener / comprender.
Una solución más fácil sería retener su expresión regular existente, luego crear dos nuevas expresiones regulares para probar su "al menos un alfabético" y "al menos un número".
Entonces, prueba para esto:
/^([a-zA-Z0-9]+)$/
Luego esto :-
//d/
Luego esto :-
/[A-Z]/i
Si su cadena pasa las tres expresiones regulares, tiene la respuesta que necesita.
Si bien la respuesta aceptada es correcta, creo que esta expresión regular es mucho más fácil de leer:
REGEX = "([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*"
Tal vez un poco tarde, pero esta es mi RE:
/^(/w*(/d+[a-zA-Z]|[a-zA-Z]+/d)/w*)+$/
Explicación:
/w*
-> 0 o más dígitos alfanuméricos, al principio
/d+[a-zA-Z]|[a-zA-Z]+/d
-> un dígito + una letra O una letra + un dígito
/w*
-> 0 o más dígitos alfanuméricos, de nuevo
Espero que sea comprensible
Y una idea con un control negativo.
/^(?!/d*$|[a-z]*$)[a-z/d]+$/i
-
^(?!
al inicio mira hacia adelante si la cadena no lo hace -
/d*$
contiene solo dígitos|
o -
[az]*$
contiene solo letras -
[az/d]+$
coincide con una o más letras o dígitos hasta$
end.
Eche un vistazo a esta demo de regex101
(la bandera i
enciende la coincidencia sin caja : az
coincide con a-zA-Z
)