0


我正在使用这个网站上用 PHP 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 个或更多重复字符,这将匹配,但如果有更少则失败。

第一个字符被捕获在第一个捕获组中,接下来的两个(或更多)由 匹配\1{2,}

于 2013-10-04T07:17:54.160 回答
0

为什么不只是:

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