我正在使用 preg match 来验证密码:
(preg_match("/^.*(?=.{5,}).*$/", $password)
它也接受特殊字符。
但由于某种原因,我需要修改它应该接受
- 只有字母数字
- 最少 5 个字符长
- 并且非常重要的是它不能有任何重复或增量字符,例如:aaaa 或 12345 或 abc123 等
.
我正在使用 preg match 来验证密码:
(preg_match("/^.*(?=.{5,}).*$/", $password)
它也接受特殊字符。
但由于某种原因,我需要修改它应该接受
.
if (preg_match(
'%^ # Start of string
(?!.*(.)\1) # Assert no repeated characters
# Assert no sequential digits/characters
(?!.*(?:01|12|23|34|45|56|67|78|89|90|
ab|bc|cd|de|ef|fg|gh|hi|ij|jk|
kl|lm|mn|no|op|pq|qr|rs|st|tu|
uv|vw|wx|xy|yz))
[a-z0-9]{5,} # Match at least five alnum characters
$ # End of string%ix',
$password)) {
# Successful match
}
扩展@TimPietzcker,他应该把所有功劳都归于他。所以一定要支持他的回答。但我需要这个:
没有三重重复字符
没有三倍增量字符/数字
因为双增量字符很奇怪,你甚至不会注意到你这样做了。
例如 test4x3x6 应该可以正常工作吗?错了,st
是增量字符。这只会让你的用户发疯。
所以我用了这个:
function is_password_strong($password){
$preg_res = preg_match(
'%^ # Start of string
(?!.*(.)\1{2}) # Assert no triple repeated characters
# Assert no sequential digits/characters
(?!.*(?:012|123|234|345|456|567|678|789|890|
abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|
klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|
uvw|vwx|wxy|xyz))
.{8,} # Match at least 8 characters
$ # End of string%ix',
$password);
if ($preg_res) {
return true;
}else{
return false;
}
}