2012-08-16 2 views
13

Je travaille sur une application Rails 3 qui doit valider le mot de passe en fonction des critères suivants: must be at least 6 characters and include one number and one letter.Valider Mot de passe utilisant l'expression rationnelle

Voici mon Regex:

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 ce moment, si je mets un mot de passe de (par exemple: dogfood) il passera. Mais ce dont j'ai besoin, c'est de passer les critères ci-dessus.

Je ne suis pas tout ce grand à regex, donc toute aide est grandement appréciée!

Répondre

27

Utilisez des assertions:

/^(?=.*[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. 

Techniquement dans ce cas, vous n'avez pas besoin des points d'ancrage, mais il est bonne habitude de les utiliser.

+0

wow, qui fonctionne parfaitement! Merci beaucoup! Pouvez-vous expliquer un peu les assertions de lookahead? – dennismonsewicz

+3

Lookaheads attendons avec impatience un motif, ici il cherchera depuis le début pour n'importe quoi (.) 0 fois ou plus suivi de [a-zA-Z] et même avec [0-9]. Lookaheads ne va pas en avant donc vous serez toujours à la position 0 quand il s'agit de. {0,6} qui va vérifier la longueur de 6+ – netigger

+0

Voir la réponse éditée pour l'explication. Mais @ DavidEverlöf merci d'ajouter une explication plus en profondeur. –

Questions connexes