Solución:
Lo más probable es que la expresión regular que busca sea enorme y una pesadilla de mantener, especialmente para las personas que no están tan familiarizadas con las expresiones regulares.
Creo que sería más fácil desglosar su expresión regular y hacerlo un poco a la vez. Puede que tome un poco más de tiempo, pero estoy bastante seguro de que mantenerlo y depurarlo sería más fácil. Esto también le permitiría proporcionar mensajes de error más dirigidos a sus usuarios (además de Invalid Password
) que debería mejorar la experiencia del usuario.
Por lo que veo, domina las expresiones regulares con bastante fluidez, por lo que supongo que darle las expresiones regulares para hacer lo que necesita sería inútil.
Al ver su comentario, así es como lo haría:
-
Debe tener ocho caracteres de largo: no necesita una expresión regular para esto. Utilizando el
.Length
la propiedad debería ser suficiente. -
Incluyendo una letra mayúscula: puede utilizar la
[A-Z]+
expresión regular. Si la cadena contiene al menos una letra mayúscula, esta expresión regular producirátrue
. -
Un carácter especial: puede utilizar el
W
que coincidirá con cualquier carácter que no sea una letra o un número o, de lo contrario, puede usar algo así[[email protected]#]
para especificar una lista personalizada de caracteres especiales. Sin embargo, tenga en cuenta que personajes como$
,^
,(
y)
son caracteres especiales en el lenguaje de expresiones regulares, por lo que deben escaparse así:$
. En resumen, puede usar elW
. -
Caracteres alfanuméricos: con el
w+
debe coincidir con cualquier letra, número y subrayado.
Eche un vistazo a este tutorial para obtener más información.
( # Start of group
(?=.*d) # must contain at least one digit
(?=.*[A-Z]) # must contain at least one uppercase character
(?=.*W) # must contain at least one special symbol
. # match anything with previous condition checking
{8,8} # length is exactly 8 characters
) # End of group
En una línea:
((?=.*d)(?=.*[A-Z])(?=.*W).{8,8})
Editar 2019-05-28:
Debe hacer coincidir toda la cadena de entrada. Entonces, puede encerrar la expresión regular entre ^
y $
para evitar asumir accidentalmente coincidencias parciales como coincidencia con toda la entrada:
^((?=.*d)(?=.*[A-Z])(?=.*W).{8,8})$
Fuentes:
-
Expresión de coincidencia de contraseña
-
Validación de la fuerza de la contraseña con expresiones regulares
Tantas respuestas … ¡todo mal!
Las expresiones regulares no tienen un operador AND, por lo que es bastante difícil escribir una expresión regular que coincida con contraseñas válidas, cuando la validez está definida por algo Y algo más Y algo más …
Pero, expresiones regulares hacer tiene un operador OR, así que simplemente aplique el teorema de DeMorgan y escriba una expresión regular que coincida inválido contraseñas.
cualquier cosa con menos de 8 caracteres O cualquier cosa sin números O cualquier cosa sin mayúsculas O cualquier cosa sin caracteres especiales
Entonces:
^(.{0,7}|[^0-9]*|[^A-Z]*|[a-zA-Z0-9]*)$
Si algo coincide con eso, entonces es un inválido contraseña.