0


PHP で書かれたこのサイトの passwordpolicy ライブラリを使用していますhttp://craig-russell.co.uk/password-policy/index.html
ほとんどのルールで perl 正規表現を使用しています。3 つの繰り返し文字を受け入れないようにする新しいルールを追加しようとしています。ここに投稿されて質問されたいくつかの正規表現を試しましたが、これは最近試したもの [\w((.)\1{3,}]
ですが、うまくいかないようです

aaaa に一致しますが、aaab と記述しても一致します。文字列全体を一致させようとしているよう

です これは正規表現が入る配列です:

$this->rules['max_allowedsame_chars'] = array(
'value' => false,
'type' => 'integer',
'test' => 'return preg_match_all("/[\w ((.)\1{3,})/",$p,$x)<=$v;',
'error' => 'Password cant contain no more than #VALUE# of the same characters');

ヒントをいただければ幸いです。

4

2 に答える 2

1

角括弧は使用しないでください。角括弧は文字クラスを意味し、ほとんどのメタ文字は意味を失います。試す:

preg_match_all("/(.)\1{2,}/",$p,$x)

これは、繰り返し文字が 3 つ以上ある場合に一致しますが、それより少ない場合は失敗します。

最初の文字は最初のキャプチャ グループでキャッチされ、次の 2 つ (またはそれ以上) は によって一致し\1{2,}ます。

于 2013-10-04T07:17:54.160 に答える
0

それだけではない理由:

preg_match('/(.)\1\1/', $p)
于 2013-10-04T07:54:10.793 に答える