El criterio de seguridad de mi contraseña es el siguiente:
- 8 caracteres de longitud
- 2 letras en mayúscula
- 1 personaje especial
(!@#$&*)
- 2 números
(0-9)
- 3 letras en minúscula
¿Alguien puede darme expresiones regulares por igual? Todas las condiciones deben cumplirse por contraseña.
password
yhello123
son contraseñas válidas!").Respuestas:
Puede hacer estas comprobaciones utilizando aserciones positivas de anticipación:
Enlace rubular
Explicación:
fuente
n
, reemplace.{8}
con.{n,}
Puede usar look-aheads positivos de longitud cero para especificar cada una de sus restricciones por separado:
Si su motor regex no es compatible con la
\p
notación y ASCII puro es suficiente, entonces puede reemplazar\p{Lu}
con[A-Z]
y\p{Ll}
con[a-z]
.fuente
Las respuestas anteriores son perfectas, pero sugiero usar múltiples expresiones regulares más pequeñas en lugar de una grande.
Dividir la expresión regular larga tiene algunas ventajas:
En general, este enfoque mantiene el código fácilmente mantenible .
Dicho esto, comparto un fragmento de código que escribo en Swift como ejemplo:
fuente
Sugeriría agregar
fuente
La solución de codaddict funciona bien, pero esta es un poco más eficiente: (sintaxis de Python)
Las clases de caracteres negados consumen todo hasta el carácter deseado en un solo paso, lo que requiere cero retroceso. (La solución dot star funciona bien, pero requiere un poco de retroceso). Por supuesto, con cadenas de destino cortas como contraseñas, esta mejora de eficiencia será insignificante.
fuente
(?#
y termina con a)
. No hay parens desequilibrados en esta expresión regular.fuente
La solución de @ codaddict funcionará.
También debe considerar cambiar algunas de sus reglas para:
Con las mejoras anteriores, y para mayor flexibilidad y legibilidad, modificaría la expresión regular a.
Explicación Básica
Explicación detallada
Y, por último, para fines de prueba, aquí hay un enlace con la expresión regular anterior
fuente
Para PHP, ¡esto funciona bien!
en este caso el resultado es verdadero
Gracias por @ridgerunner
fuente
return preg_match("/^(?=(?:[^A-Z]*[A-Z]){2})(?=(?:[^0-9]*[0-9]){2}).{8,}$/", 'CaSu4Li8')
?Otra solución:
fuente
La contraseña debe cumplir al menos 3 de las siguientes 4 reglas de complejidad,
[al menos 1 carácter en mayúscula (AZ) al menos 1 carácter en minúscula (az) al menos 1 dígito (0-9) al menos 1 carácter especial - no olvide tratar el espacio como caracteres especiales también]
al menos 10 caracteres
a lo más 128 caracteres
no más de 2 caracteres idénticos seguidos (por ejemplo, 111 no está permitido)
'^ (?!. (.) \ 1 {2}) ((? =. [Az]) (? =. [AZ]) (? =. [0-9]) | (? =. [Az] ) (? =. [AZ]) (? =. [^ A-zA-Z0-9]) | (? =. [AZ]) (? =. [0-9]) (? =. [^ A -zA-Z0-9]) | (? =. [az]) (? =. [0-9]) (? =. * [^ a-zA-Z0-9])). {10,127} $ '
(?!. * (.) \ 1 {2})
(? =. [az]) (? =. [AZ]) (? =. * [0-9])
(? =. [az]) (? =. [AZ]) (? =. * [^ a-zA-Z0-9])
(? =. [AZ]) (? =. [0-9]) (? =. * [^ A-zA-Z0-9])
(? =. [az]) (? =. [0-9]) (? =. * [^ a-zA-Z0-9])
. {10.127}
fuente
Desafortunadamente, todas las expresiones regulares anteriores no funcionaron para mí. Las reglas básicas de una contraseña segura son
Entonces, Best Regex sería
La expresión regular anterior tiene una longitud mínima de 8. Puede cambiarla de {8,} a { any_number ,}
Modificación en las reglas?
supongamos que desea un mínimo de x caracteres minúsculas, y caracteres mayúsculas, z caracteres números, longitud mínima total w . Entonces intente debajo de regex
Nota: Cambiar x , y , z , w en regex
Editar: respuesta de expresiones regulares actualizada
Edit2: modificación añadida
fuente
12345678
¿está seguro de que es un fuerte contraseña? Por favor, intente su expresión regular antes de publicar.