23

パスワードチェッカーに少し問題があります。

いくつかのフィールドを持つ登録フォームがあります。jQuery Validate プラグインを使用して、ユーザー入力を検証します。

パスワードの検証を除いて、すべて機能します。

パスワードは、いくつかの最小要件を満たす必要があります。

  • 最小の長さ: 8 -> 'minlength: 8' を使用します
  • 少なくとも 1 つの小文字
  • 少なくとも 1 桁
  • 使用できる文字: AZ az 0-9 @ * _ - . !

現時点では、このコードを使用してパスワードを検証しています。

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

このコードは、許可されている文字には機能しますが、最小要件には機能しません。たとえば(?=.*[a-z])、小文字の要件に使用できることを知っています。しかし、私はそれを機能させません。

追加する(?=.*[a-z])と、コード全体が機能しなくなります。コードを既存のコードに適切に追加する方法を知る必要があります。

回答ありがとうございます。

これは完全なコードです

<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>
4

8 に答える 8

45

追加する(?=.*[a-z])と、コード全体が機能しなくなります。

ここに追加してください:

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

ただし、先読みなしでこれを行う方がはるかに簡単です。

$.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
});
于 2013-09-11T17:10:31.637 に答える
2

「+」の代わりに {8,} を使用して、最大値なしで最小 8 文字を指定できます。さらに {8, 20} を使用して、最小 8 文字と最大 20 文字を指定できます。

本当に、すべての検証を単一の正規表現に絞り込もうとすることに価値はありません。分割すると、保守がはるかに簡単になり、バグが発生しにくくなり、要件全体ではなく、パスワードが失敗した具体的な理由をユーザーに報告できるようになります。

いくつかのチェックに分割できます

//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)

jQuery Validation プラグインには詳しくありませんが、失敗したテストごとに役立つメッセージを返すことができると思います。

于 2013-09-11T16:41:22.660 に答える
0

すべての特殊記号でこれを試してください

$.validator.addMethod("pwdcheck", function(value) {
    return /[A-Z]/.test(value) &&
           /\d/.test(value) && 
           /[=!\-@._*\$\#\%\^\&\(\)\~\`\<\>\/\?\\\|\{\}\[\]\;\:\'\"\,\+]/.test(value)
});
于 2020-12-01T14:27:14.343 に答える