2012-08-16 20 views
13

Estoy trabajando en una aplicación Rails 3 que necesita para validar la contraseña en base a los siguientes criterios: must be at least 6 characters and include one number and one letter.Validación de contraseña usando expresiones regulares

Aquí está mi expresión regular:

validates :password, :format => {:with => /^[([a-z]|[A-Z])0-9_-]{6,40}$/, message: "must be at least 6 characters and include one number and one letter."} 

En este momento si pongo una contraseña de (por ejemplo: dogfood) pasará. Pero lo que necesito hacer es aprobar los criterios anteriores.

no soy tan grande en expresiones regulares, por lo que cualquier y toda ayuda es muy apreciada!

Respuesta

27

afirmaciones Uso de búsqueda hacia delante:

/^(?=.*[a-zA-Z])(?=.*[0-9]).{6,}$/ 
    |    |   | 
    |    |   | 
    |    |   Ensure there are at least 6 characters. 
    |    | 
    |    Look ahead for an arbitrary string followed by a number. 
    |       
    Look ahead for an arbitrary string followed by a letter. 

Técnicamente, en este caso no se necesitan los anclajes, pero es buen hábito de usarlos.

+0

wow, que funciona perfectamente! ¡muchas gracias! ¿Puedes explicar un poco sobre las afirmaciones de anticipación? – dennismonsewicz

+3

símbolos de anticipación esperan para un patrón, aquí se verá desde el principio para nada (.) A 0 o más veces seguido de [a-zA-Z] y lo mismo con [0-9]. Lookaheads no avanza por lo que aún estarás en la posición 0 cuando se trata de. {0,6} que verificará la longitud de 6+ – netigger

+0

Consulta la respuesta editada para obtener una explicación. Pero @ DavidEverlöf gracias por agregar una explicación más detallada. –

Cuestiones relacionadas