Perl Regex防止密码策略重复出现字符

时间:2013-10-04 07:15:43

标签: php regex perl


我正在使用这个用PHP http://craig-russell.co.uk/password-policy/index.html编写的网站的密码策略库 它在大多数规则中使用perl regex。 我一直试图添加一个新规则,使其不接受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');

任何提示都将不胜感激。

2 个答案:

答案 0 :(得分:1)

不要使用方括号,它们意味着字符类,大多数元字符都会失去意义。尝试:

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

如果你有3个或更多的重复字符,这将匹配,但如果有更少的话,则会失败。

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

答案 1 :(得分:0)

为什么不呢:

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