84 votes

javascript regex pour mot de passe contenant au moins 8 caractères, 1 chiffre, 1 majuscule et 1 minuscule

J'essaie d'écrire une expression régulière pour valider un mot de passe qui doit répondre aux critères suivants :

  • Contient au moins 8 caractères
  • contiennent au moins 1 chiffre
  • contenir au moins 1 caractère minuscule (a-z)
  • contenir au moins 1 caractère majuscule (A-Z)
  • contient uniquement 0-9a-zA-Z

J'ai essayé ce qui suit, mais cela ne semble pas fonctionner.

http://jsfiddle.net/many_tentacles/Hzuc9/

<input type='button' value='click' class='buttonClick' />
<input type='text' />
<div></div>

et...

$(".buttonClick").click(function () {

    if ($("input[type=text]").filter(function () {
        return this.value.match(/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])([a-zA-Z0-9]{8})$/);
    })) {
        $("div").text("pass");
    } else {
        $("div").text("fail");
    }

});

Des idées ?

242voto

Minko Gechev Points 11295

Votre expression régulière doit ressembler à ceci :

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/

Voici une explication :

/^
  (?=.*\d)          // should contain at least one digit
  (?=.*[a-z])       // should contain at least one lower case
  (?=.*[A-Z])       // should contain at least one upper case
  [a-zA-Z0-9]{8,}   // should contain at least 8 from the mentioned characters
$/

23voto

Anthony Grist Points 25966

Il serait beaucoup plus facile d'utiliser des expressions régulières individuelles pour tester les différentes parties que d'essayer d'obtenir une seule expression régulière pour les couvrir toutes. Il est également plus facile d'ajouter ou de supprimer des critères de validation.

Notez également que votre utilisation de .filter() était incorrecte ; elle renverra toujours un objet jQuery (ce qui est considéré comme vrai en JavaScript). Personnellement, j'utiliserais un .each() pour passer en revue toutes les entrées et indiquer le statut de réussite ou d'échec de chacune d'entre elles. Quelque chose comme ce qui suit :

$(".buttonClick").click(function () {

    $("input[type=text]").each(function () {
        var validated =  true;
        if(this.value.length < 8)
            validated = false;
        if(!/\d/.test(this.value))
            validated = false;
        if(!/[a-z]/.test(this.value))
            validated = false;
        if(!/[A-Z]/.test(this.value))
            validated = false;
        if(/[^0-9a-zA-Z]/.test(this.value))
            validated = false;
        $('div').text(validated ? "pass" : "fail");
        // use DOM traversal to select the correct div for this input above
    });
});

Démonstration de travail

10voto

nbrooks Points 10150

Au moins 8 = {8,} :

str.match(/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])([a-zA-Z0-9]{8,})$/)

2voto

Tim Pietzcker Points 146308

Votre expression rationnelle n'autorise que 8 caractères. Utiliser {8,} pour spécifier huit ou plus au lieu de {8} .

Mais pourquoi limiter le nombre de caractères autorisés pour vos mots de passe ? Les mots de passe alphanumériques de 8 caractères peuvent être déchiffrés par mon téléphone en quelques minutes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X