0

パスワードの強度をチェックする正規表現パターンを作成しました。

(?=^.{8,15}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*

ユーザーは、次の 4 つのカテゴリのうち少なくとも 3 つに由来する文字のパスワードを使用する必要があります。

  1. 少なくとも 1 つの大文字
  2. 少なくとも 1 つの小文字
  3. 少なくとも 1 つの数字
  4. 少なくとも 1 つの特殊文字/記号

注: また、最小長と最大長 {8,15} も強制します。

パターンはサーバー側の PHP スクリプトで正常に動作し、複数の javascript Regex-tester-tools (例: http://www.regular-expressions.info/javascriptexample.html ) でもテストしました。これまでのところ、すべてが完璧に見えます...

しかし、単純なExtjs textfield validator 内で使用している場合 4つのカテゴリすべてを使用している場合、バリデータはTRUEのみを返します。

validator: function (value) {

        var pattern = 
            '(?=^.{8,15}$)'+
            '((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|' + 
            '(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|' +
            '(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|' +
            '(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*';
        if (value.match(pattern)) {
            return true;
        } else {
            return this.i18n.invalidPassword;
        }
    }

そして今、私はアイデアを使い果たしています...

4

1 に答える 1

3

パターンを正しく設定していません:

    var pattern = new RegExp(
        '(?=^.{8,15}$)'+
        '((?=.*\\d)(?=.*[A-Z])(?=.*[a-z])|' + 
        '(?=.*\\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|' +
        '(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|' +
        '(?=.*\\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*'
    );

\\の代わりに に注意してください\。そうしないと\、正規表現コードが到達するまでに がなくなってしまいます。代わりにネイティブの正規表現構文を使用することもできますが、それを複数の行に分割する方法はありません。

編集— 具体的には、正規表現の出現\\前。\dバックスラッシュを二重にしないと、正規表現は小文字の「d」だけになります。

于 2013-07-30T14:15:12.840 に答える