webentwicklung-frage-antwort-db.com.de

jQuery Validate Plugin - Passwortprüfung - Mindestanforderungen - Regex

Ich habe ein kleines Problem mit meinem Passwort-Checker.

Es gibt ein Anmeldeformular mit einigen Feldern ..__ Ich benutze jQuery Validate Plugin, um Benutzereingaben zu überprüfen.

Es funktioniert alles außer der Passwort-Überprüfung:

Das Passwort sollte einige Mindestanforderungen erfüllen:

  • mindestlänge: 8 -> Ich benutze nur 'Minlength: 8'
  • mindestens ein Kleinbuchstabe
  • mindestens eine Ziffer
  • Erlaubte Zeichen: A-Z a-z 0-9 @ * _ -. !

Im Moment verwende ich diesen Code, um das Passwort zu bestätigen:

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

Dieser Code funktioniert für die zulässigen Zeichen, jedoch nicht für Mindestanforderungen .. Ich weiß, dass Sie beispielsweise (?=.*[a-z]) für eine Kleinbuchstabe verwenden können. Aber ich verstehe es einfach nicht.

Wenn ich (?=.*[a-z]) hinzufüge, funktioniert der gesamte Code nicht mehr. Ich muss wissen, wie man den Code richtig in den vorhandenen Code einfügt.

Danke für deine Antworten!

Dies ist der vollständige Code

<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=!\[email protected]_*]+$/.test(value);
                    });
                });
                </script>
18
bayerphi

Wenn ich (?=.*[a-z]) hinzufüge, funktioniert der gesamte Code nicht mehr.

Fügen Sie es hier hinzu:

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

Ohne Lookahead ist dies jedoch viel einfacher:

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

Nun, Sie können {8,} anstelle von "+" für ein Minimum von 8 Zeichen ohne oder besser noch ein {8, 20} für ein Minimum von 8 und ein Maximum von 20 verwenden.

Wirklich, aber ich sehe keinen Wert darin, zu versuchen, alle Ihre Gültigkeitsprüfung in einem einzigen Regex zu komprimieren. Wenn Sie es aufteilen, ist die Wartung viel einfacher, weniger anfällig für Fehler, und Sie können dem Benutzer den spezifischen Grund WARUM mitteilen, warum das Kennwort anstelle der gesamten Anforderung fehlgeschlagen ist.

Sie könnten es in ein paar Checks aufteilen

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

Ich bin nicht mit dem jQuery Validation-Plugin vertraut, aber ich gehe davon aus, dass Sie dann für jeden fehlgeschlagenen Test hilfreiche Informationen anzeigen können.

2
Anon

Die Kennwortüberprüfung kann mehrere Regeln verwenden, beispielsweise:

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

wenn Sie die Gültigkeitsprüfung von Confirm Password und Minimumzeichen überprüfen möchten, können Sie verwenden

<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