2011-04-29 9 views
5

Estoy buscando una sola expresión regular para nuestros requisitos de contraseña. Contraseñas:Pregunta de RegEx para la validación de la fuerza de la contraseña

  • debe ser al menos 8 caracteres
  • no puede contener espacios
  • contener tanto letras minúsculas y mayúsculas
  • contener al menos un dígito numérico
  • contener al menos un carácter especial (es decir, cualquier carácter no 0-9,a-z,A-Z)
+4

Este es un uso horrible de las expresiones regulares. Es tan simple de hacer manualmente. Aconsejaría no usar regex para esto. –

+0

Veo una explosión combinatoria ... –

+1

El hecho de que esté en una sola expresión lo hace complejo y muy difícil de leer para un humano que tiene que mantenerlo. Sugiero dividirlo en diferentes pruebas para que sea más fácil de mantener. También olvidó mencionar qué motor regexp está utilizando, ya que existen diferencias con lo que podría hacer. Dependiendo de dónde se realice la prueba, podría ser de interés informar al usuario de por qué falló la contraseña. – some

Respuesta

4

Idea y la mayor parte del trabajo tomado de http://www.zorched.net/2009/05/08/password-strength-validation-with-regular-expressions/

^\S*(?=\S{8,})(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])(?=\S*[\W])\S*$ 

he utilizado la respuesta básica en la parte inferior de su puesto, pero sustituye todos los puntos con \S para descartar los caracteres de espacio, y se movió alrededor de algunas de las aserciones.

+0

Casi +1. El artículo al que se hace referencia es bueno, pero sugiere erróneamente tener la estrella de puntos '. *' Al comienzo de la expresión (esto no es necesario porque la estrella de puntos al final coincidirá con la cadena). Aunque no daña este problema específico (tu respuesta es correcta y funciona bien), fallará si hay un límite superior en la longitud de la contraseña. Si el requisito de longitud es de 8 a 12 caracteres, entonces una expresión correcta sería: '^ (? =. {8,12} $) (? =. * [Az]) (? =. * [AZ]) (? =. * \ d) (? =. * \ W) \ S * $ '(Tenga en cuenta también que no hay necesidad de' \ S' en los cabezales). De lo contrario, buena respuesta. – ridgerunner

8

Probablemente sea más fácil codificar la lógica. Regex se usa para hacer coincidir patrones. Las contraseñas tienden a ser cadenas algo aleatorias, por lo que el problema no se presta fácilmente para ser resuelto por una expresión regular. Es posible, pero será críptico de leer y difícil de mantener.

Cuestiones relacionadas