2010-12-08 65 views
0

J'utilise l'expression régulière suivante mon code Java.Utilisation d'une expression régulière pour la validation de mot de passe

^.*(?=.{6,20})(?=.*[a-z].*[a-z])(?=.*[A-Z])(?=.*[0-9]).*$ 

Quand je suis en train d'utiliser le même xml que

^.\*(\?=.{6,20})(\?=.\*[a-z].\*[a-z])(\?=.\*[A-Z])(\?=.\*[0-9]).\*$ 

Il ne fonctionne pas. Il montre l'exception comme ci-dessous.

java.lang.IllegalArgumentException: -cvc modèle valide: Valeur 'narendra1A' n'est pas facette valide par rapport à modèle «^* (\ = {} 6,20?.). (\? =. * [az]. * [az]) (\? =. * [AZ]) (\? =. * [0-9]). * $ 'pour le type ' #AnonType_passwordcreateUser '.

Quelqu'un peut-il aider à cet égard.

Merci,

Narendra

+0

Non lié à la question, mais vous devez supprimer le premier '. *' Juste après le '^'. C'est inutile et rend votre regex très inefficace. En outre, si vous pensez que vous restreignez la longueur du mot de passe à 6-20 caractères, vous ne l'êtes pas. Une chaîne de 100 caractères passera cette regex très bien. –

+1

Pourquoi y a-t-il une limite supérieure de 20 caractères? – Gumbo

+0

@Gumbo: Peu importe, toute chaîne de plus de 5 caractères passera, si vous regardez l'expression régulière de près :) –

Répondre

2

Cela ne répond pas directement à votre question, mais il peut être une meilleure option pour vous que d'essayer de faire des contrôles de qualité de mot de passe avec regexes.

La bibliothèque vt-password est une excellente bibliothèque Java qui implémente la vérification de la qualité des mots de passe basée sur des règles. En plus de compter les caractères/classes de caractères, il vérifie les mots de passe utilisés précédemment, vérifie les caractères répétés, etc.

(Si vous utilisez Spring, il est assez simple de configurer la règle de mot de passe objets dans un fichier de câblage Spring XML. Cela vous permet d'ajuster les règles sans changer votre code.)

0

Mot de passe expression régulière Motif

((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20}) 

description de

(   # Start of group 
    (?=.*\d)  # must contains one digit from 0-9 
    (?=.*[a-z]) # must contains one lowercase characters 
    (?=.*[A-Z]) # must contains one uppercase characters 
    (?=.*[@#$%]) # must contains one special symbols in the list "@#$%" 
    .   #  match anything with previous condition checking 
     {6,20} #  length at least 6 characters and maximum of 20 
)   # End of group 
+1

Mieux vaut utiliser les compléments au lieu de '.'. Donc '\ D * \ d',' [^ a-z] * [a-z] ',' [A-Z] * [A-Z] ', etc. – Gumbo

+0

:) oui! +1 merci –

0

Votre motif utilise des caractères interdits dans le document XML. Pour simplifier les choses, mettez le mot de passe dans CDATA.