web-dev-qa-db-fra.com

plugin jQuery Validate - vérification du mot de passe - configuration minimale - Regex

J'ai un petit problème avec mon vérificateur de mot de passe.

Il y a un formulaire d'inscription avec quelques champs . J'utilise le plugin jQuery Validate pour valider les entrées utilisateur.

Tout fonctionne sauf la validation du mot de passe:

Le mot de passe doit répondre à certaines exigences minimales:

  • longueur minimum: 8 -> je viens d'utiliser 'minlength: 8'
  • au moins un caractère minuscule
  • au moins un chiffre
  • Caractères autorisés: A-Z a-z 0-9 @ * _ -. !

Pour le moment, j'utilise ce code pour valider le mot de passe:

$.validator.addMethod("pwcheck",
function(value, element) {
   return /^[A-Za-z0-9\d=!\-@._*]+$/.test(value);
});

Ce code fonctionne pour les caractères autorisés, mais pas pour les exigences minimales ..__ Je sais que vous pouvez utiliser par exemple (?=.*[a-z]) pour une exigence de minuscule. Mais je n'arrive pas à le faire fonctionner.

Si j'ajoute (?=.*[a-z]), tout le code ne fonctionne plus. J'ai besoin de savoir comment ajouter correctement le code à celui existant.

Merci pour vos réponses!

C'est le code complet

<script>
                $(function() {
                    $("#regform").validate({
                        rules: {
                            forename: {
                                required: true
                            },
                            surname: {
                                required: true
                            },
                            username: {
                                required: true
                            },
                            password: {
                                required: true,
                                pwcheck: true,
                                minlength: 8
                            },
                            password2: {
                                required: true,
                                equalTo: "#password"
                            },
                            mail1: {
                                required: true,
                                email: true
                            },
                            mail2: {
                                required: true,
                                equalTo: "#mail1"
                            }
                        },
                        messages: {
                            forename: {
                                required: "Vornamen angeben"
                            },
                            surname: {
                                required: "Nachnamen angeben"
                            },
                            username: {
                                required: "Usernamen angeben"
                            },
                            password: {
                                required: "Passwort angeben",
                                pwcheck: "Das Passwort entspricht nicht den Kriterien!",
                                minlength: "Das Passwort entspricht nicht den Kriterien!"
                            },
                            password2: {
                                required: "Passwort wiederholen",
                                equalTo: "Die Passwörter stimmen nicht überein"
                            },
                            mail1: {
                                required: "Mail-Adresse angeben",
                                email: "ungültiges Mail-Format"
                            },
                            mail2: {
                                required: "Mail-Adresse wiederholen",
                                equalTo: "Die Mail-Adressen stimmen nicht überein"
                            }
                        }
                    });

                    $.validator.addMethod("pwcheck",
                        function(value, element) {
                            return /^[A-Za-z0-9\d=!\-@._*]+$/.test(value);
                    });
                });
                </script>
18
bayerphi

Si j'ajoute (?=.*[a-z]), tout le code ne fonctionne plus.

Ajoutez le ici:

/^(?=.*[a-z])[A-Za-z0-9\d=!\-@._*]+$/

Cependant, il est beaucoup plus facile de le faire sans regarder de tête

$.validator.addMethod("pwcheck", function(value) {
   return /^[A-Za-z0-9\d=!\-@._*]*$/.test(value) // consists of only these
       && /[a-z]/.test(value) // has a lowercase letter
       && /\d/.test(value) // has a digit
});
38
Bergi

Eh bien, vous pouvez utiliser {8,} au lieu de "+" pour un minimum de 8 caractères sans maximum ou mieux encore un {8, 20} pour un minimum de 8 et un maximum de 20.

Vraiment bien, je ne vois pas l'intérêt d'essayer de compresser toute votre validation dans une seule expression rationnelle. Si vous le divisez, cela facilite beaucoup la maintenance, réduit le risque de bogues et vous permet de signaler à l'utilisateur la raison spécifique POURQUOI le mot de passe a échoué au lieu de répondre à l'exigence complète.

Vous pouvez le casser en quelques chèques

//proper length
value.length >= 8 
//only allowed characters
/^[A-Za-z0-9\d=!\-@._*]+$/.test(value) 
//has a digit
/\d/.test(value)
//has a lowercase letter
/[a-z]/.test(value)

Je ne connais pas bien le plug-in jQuery Validation, mais je suppose que vous pouvez ensuite renvoyer un message utile pour chaque test ayant échoué.

2
Anon

La validation du mot de passe peut utiliser plusieurs règles, par exemple:

var _validatePassword = function (validateUserNameRules, inputModel)
    {
        //bolean parameter validateUserNameRules -> true/false

        //this method recive a model like this:
        //inputModel.userName -> string
        //inputModel.password -> string
        //inputModel.password2 -> String

        var ResultModel = {
            ResultId: 1, //1 success
            Message: "Password is correct."
            };

        if (validateUserNameRules && inputModel.userName == "") {

            ResultModel.ResultId = 2;
            ResultModel.Message = "Error: User name cannot be blank.";
            return (ResultModel);
        }

        var re = /^\w+$/;
        if (validateUserNameRules && !re.test(inputModel.userName)) {

            ResultModel.ResultId = 2;
            ResultModel.Message = "Error: Username must contain only letters, numbers and underscores.";
            return (ResultModel);

        }

        if (inputModel.password != "" && inputModel.password == inputModel.password2) {
            if (inputModel.password.length < 6) {
                ResultModel.ResultId = 2;
                ResultModel.Message = "Error: Password must contain at least six characters.";
                return (ResultModel);
            }
            if (validateUserNameRules && inputModel.password == inputModel.userName) {
                ResultModel.ResultId = 2;
                ResultModel.Message = "Error: Password must be different from the Account Name.";
                return (ResultModel);
            }
            re = /[0-9]/;
            if (!re.test(inputModel.password)) {
                ResultModel.ResultId = 2;
                ResultModel.Message = "Error: Password must contain at least one number (0-9).";
                return (ResultModel);
            }
            re = /[a-z]/;
            if (!re.test(inputModel.password)) {

                ResultModel.ResultId = 2;
                ResultModel.Message = "Error: Password must contain at least one lowercase letter (a-z).";
                return (ResultModel);

            }
            re = /[A-Z]/;
            if (!re.test(inputModel.password)) {

                ResultModel.ResultId = 2;
                ResultModel.Message = "Error: Password must contain at least one uppercase letter (A-Z).";
                return (ResultModel);
            }
        } else {
            ResultModel.ResultId = 2;
            ResultModel.Message = "Error: Please check that you've entered and confirmed your password.";
            return (ResultModel);
        }

        return (ResultModel); //success password validation!!
    };
0
David Castro

si vous voulez vérifier confirmer le mot de passe et caractère minimum validation, alors vous pouvez utiliser

<input type="password" id="password" name="password"  class="validate[required,minSize[8]]"/>
<input type="password" id="confirm_password" name="confirm_password"  class="validate[required,equals[password]]"/>
0
sandeep kumar