我正在使用这个用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');
任何提示都将不胜感激。
答案 0 :(得分:1)
不要使用方括号,它们意味着字符类,大多数元字符都会失去意义。尝试:
preg_match_all("/(.)\1{2,}/",$p,$x)
如果你有3个或更多的重复字符,这将匹配,但如果有更少的话,则会失败。
第一个字符在第一个捕获组中捕获,接下来的两个(或更多)由\1{2,}
匹配。
答案 1 :(得分:0)
为什么不呢:
preg_match('/(.)\1\1/', $p)