Quiero una expresión regular para comprobar eso
una contraseña debe tener ocho caracteres, incluida una letra mayúscula, un carácter especial y caracteres alfanuméricos.
Y aquí está mi expresión de validación que es para ocho caracteres, incluida una letra mayúscula, una letra minúscula y un número o carácter especial.
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"
¿Cómo puedo escribirlo para una contraseña que debe tener ocho caracteres, incluida una letra mayúscula, un carácter especial y caracteres alfanuméricos?
Respuestas:
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 tu expresión regular y hacerlo un poco a la vez. Puede que sea necesario un poco más de trabajo, 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 solo
Invalid Password
), lo que debería mejorar la experiencia del usuario.Por lo que veo, domina las expresiones regulares con bastante fluidez, así 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. Usar la
.Length
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 cederátrue
.Un carácter especial: puede usar 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í[!@#]
para especificar una lista personalizada de caracteres especiales. Nota sin embargo que los caracteres tales como$
,^
,(
y)
son caracteres especiales en el lenguaje de expresiones regulares, por lo que necesitan ser escapado de este modo:\$
. En resumen, puede usar el\W
.Caracteres alfanuméricos: el uso de
\w+
debe coincidir con cualquier letra, número y guión bajo.Eche un vistazo a este tutorial para obtener más información.
fuente
En una línea:
Editar 2019-05-28:
Debe coincidir con la cadena de entrada completa. Por lo tanto, puede encerrar la expresión regular entre
^
y$
para evitar asumir accidentalmente coincidencias parciales como una entrada completa:Fuentes:
Expresión de coincidencia de contraseña
Validación de la fuerza de la contraseña con expresiones regulares
fuente
^
y$
. Prueba esto:^((?=.*\d)(?=.*[A-Z])(?=.*\W).{8,8})$
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 ...
Sin embargo, las expresiones regulares hacer que un operador OR, por lo que sólo aplicar el teorema de De Morgan, y escribir una expresión regular que coincide válidos 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:
Si algo coincide con eso, entonces es una contraseña inválida .
fuente
|.{9,}
. +1 para el conceptoLa respuesta es no usar una expresión regular. Esto es conjuntos y contando.
Las expresiones regulares tienen que ver con el orden.
En tu vida como programador se te pedirá que hagas muchas cosas que no tienen sentido. Aprenda a profundizar un nivel más. Aprenda cuando la pregunta es incorrecta.
La pregunta (si menciona expresiones regulares) es incorrecta.
Pseudocódigo (últimamente ha estado cambiando entre demasiados idiomas):
Apuesto a que leyó y comprendió el código anterior casi al instante. Apuesto a que tardó mucho más con la expresión regular y está menos seguro de que sea correcta. Extender la expresión regular es arriesgado. Extendido el inmediato anterior, mucho menos.
Tenga en cuenta también que la pregunta está formulada de manera imprecisa. ¿El juego de caracteres es ASCII o Unicode, o ?? Mi conjetura al leer la pregunta es que se asume al menos un carácter en minúscula. Entonces creo que la última regla asumida debería ser:
(Cambiar de sombrero a centrado en la seguridad, esta es una regla realmente molesta / no útil).
Aprender a saber cuándo la pregunta es incorrecta es enormemente más importante que las respuestas inteligentes. Una respuesta inteligente a una pregunta incorrecta casi siempre es incorrecta.
fuente
Como ejemplo, cómo se podría hacer esto con una expresión regular legible / mantenible.
Para una expresión regular más larga, siempre debe usar
RegexOptions.IgnorePatternWhitespace
para permitir espacios en blanco y comentarios en la expresión para una mejor legibilidad.fuente
lookahead assertion
tipo de patrón "y" para cubrir toda la restricción dentro de una sola expresión regular. Funciona para más restricciones y se puede generar fácilmente si algunas restricciones deben habilitarse / deshabilitarse por configuración.Si solo necesita una mayúscula y un carácter especial, esto debería funcionar:
fuente
AAaaaaaaa#
no está bien según esta expresiónLa expresión regular que estaba buscando es:
/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*\[\]"\';:_\-<>\., =\+\/\\]).{8,}$/u
.Ejemplo y prueba: http://regexr.com/3fhr4
fuente
.
antes del{8,}
a[^\s]
.Esta pregunta comienza a ser viral y aparecieron muchas sugerencias interesantes.
Sí, escribir a mano es complicado. Por tanto, una solución más sencilla es utilizar una plantilla. Aunque la expresión regular resultante puede no ser la más óptima, será más fácil de mantener y / o cambiar, y el usuario tendrá un mejor control sobre el resultado. Es posible que me haya perdido algo, por lo que cualquier crítica constructiva será útil.
Estos enlaces pueden ser interesantes: haga coincidir al menos 2 dígitos 2 letras en cualquier orden en una cadena , Lenguaje de expresión regular , Captura de grupos
Estoy usando esta plantilla
(?=(?:.*?({type})){({count})})
basada en todas las expresiones regulares que vi en SO. El siguiente paso es reemplazar el patrón necesario (number
,special character
...) y agregar la configuración para la longitud.Hice una pequeña clase para componer la expresión regular PasswordRegexGenerator.cs Un ejemplo:
fuente
Puede usar la siguiente clase para la validación:
donde 6 y 20 son la longitud mínima y máxima de la contraseña.
fuente
(?>{8,})
(?<=...)
(?<=\p{Lu}.*)
(?<=\W.*)
(?<=\w.*)
Resumió:
(?>.{8,})(?<=\p{Lu}.*)(?<=\W.*)(?<=\w.*)
fuente
Lo mejor es no usar expresiones regulares para todo. Esos requisitos son muy ligeros. En la CPU, las operaciones de cadena para verificar los criterios / validación son mucho más baratas y rápidas que las expresiones regulares.
fuente
fuente