2010-03-06 13 views
8

tengo los siguientes requisitos de contraseña:RegEx contraseña segura

1) debe ser de 6-15 caracteres de longitud
2) debe tener al menos un carácter en minúsculas
3) debe tener al menos un carácter en mayúscula
4) en caso de tener al menos un número
5) en caso de tener al menos un carácter especial
6) no debe tener espacios

Puede alguien me sugieren una expresión regular para este requisito?

+4

limitando la duración de una la contraseña rara vez es una buena idea – TomHastjarjanto

+0

¿Por qué tiene que ser una expresión regular? Esto sería más legible como código ordinario. –

+0

Mark - Probablemente esté buscando un reg-ex para que pueda ser utilizado por el lado del cliente y del servidor en un control de validador asp.net. – bkaid

Respuesta

8

No estoy del todo seguro de lo que quiere decir con "carácter especial" por lo que estoy interpretando esto como \W, pero usted puede cambiar esto si desea:

^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\W)\S{6,15}$ 
+4

+1, pero tenga cuidado con el error: http://blog.stevenlevithan.com/archives/regex-lookahead-bug –

+0

+1 Alan. ¡Siempre es bueno saber sobre errores documentados! –

11
No

seguro de que lo utilice una expresión regular para que: expresiones regulares no siempre son la herramienta adecuada para cualquier posible tipo de trabajo ...

Aquí, se especifica una lista de 6 requisitos; entonces, ¿por qué no solo usar 6 pruebas diferentes, una por requerimiento?
Esas 6 pruebas diferentes, debo agregar, serían realmente simples, mientras que una Regex sería mucho más difícil de escribir (solicitó ayuda, probablemente no la tenga para las 6 pruebas).

Esto haría su código mucho más fácil de entender, apostaría ;-)
Y también: más fácil de mantener; y es más fácil agregar/eliminar/cambiar una de las condiciones correspondientes a uno de los requisitos.

+6

La segunda ventaja de este método sería proporcionar mejores mensajes de error cuando una contraseña no cumple con los requisitos. Por ejemplo, indicar * qué tipo de carácter requerido se omitió. No hay nada más frustrante que ingresar una contraseña que crees que funcionará y obtener un mensaje de error genérico. – Emily

+0

@thekaido: lo mismo para las 6 pruebas, incluso si la sintaxis puede ser un poco diferente ;;; @Emily: ¡tan cierto! –

+0

Espera, espera! Una herramienta no funciona para todos los trabajos? ¡Si eso es así, también estás diciendo que no debería usar una motosierra para la delicada carpintería decorativa que estoy a punto de hacer! ¡Uf! ¡Tuve suerte allí! –

3

Regexlib.com tiene un montón de ejemplos para usted y una base de datos de búsqueda de reg ex.

+0

+1 para el enlace – citronas

1
1 => /^.{6,15}$/ 
2 => /[a-z]/ 
3 => /[A-Z]/ 
4 => /\d/ 
5 => /[#{special_chars_for_regex}]/ 
6 => /^\S*$/ 
+0

'\ W' significa * no-word-character *, not * not-whitespace * (eso es' \ S', pero también podría incorporar eso en la primera condición como @Mark Byers lo hizo). Además, "caracteres especiales" solo significa puntuación. –

+0

Cambié '\ W' a' \ S' (gracias). No tenía ganas de deletrear el conjunto completo de caracteres especiales, ¡pero '[email protected] # $%^& * -_ = + [{]} \ | ;: '", <.> /?()' Podría hacer una pizca. – yfeldblum

Cuestiones relacionadas