2013-10-04 34 views
0


我使用本网站用PHP编写的http://craig-russell.co.uk/password-policy/index.html
一个passwordpolicy库它使用Perl的正则表达式的大部分规则。 我一直在试图添加一个新的规则,使其不接受3个重复的字符。 我试过severals正则表达式已经发布,并询问了这里,这是一个我最近尝试了 [\w((.)\1{3,}]
但它似乎只是不工作Perl的正则表达式防止反复字符的密码策略

它匹配AAAA但如果你写它仍然匹配它。好像它试图将字符串作为一个整体

这场比赛是在正则表达式去数组:

$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');

任何提示,将不胜感激。

回答

1

不要使用方括号,它们表示字符类和大多数元字符在它们中失去了它们的含义。请尝试:

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

如果您有3个重复字符或更多,但如果少于3个,则会失败。

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

0

为什么不干脆:

preg_match('/(.)\1\1/', $p)