2013-10-04 68 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)