Php 重复或增量字符的preg匹配
我正在使用preg match验证密码,如下所示:Php 重复或增量字符的preg匹配,php,regex,preg-match,Php,Regex,Preg Match,我正在使用preg match验证密码,如下所示: (preg_match("/^.*(?=.{5,}).*$/", $password) 也可以接受特殊字符 但由于某些原因,我需要修改它,它应该可以接受 只有字母数字 至少5个字符长 非常重要的是,它不能有任何重复或重复 增量字符,如:aaaa或12345或abc123等 .扩展到@TimPietzcker,他应该获得所有荣誉。所以一定要对他的答案投赞成票。但我需要这个: 没有三重重复字符 无三重增量字符/数字 因为双增量字符很奇怪,你甚
(preg_match("/^.*(?=.{5,}).*$/", $password)
也可以接受特殊字符
但由于某些原因,我需要修改它,它应该可以接受
- 只有字母数字
- 至少5个字符长
- 非常重要的是,它不能有任何重复或重复 增量字符,如:aaaa或12345或abc123等
.扩展到@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;
}
}
可以使用正则表达式检测重复,但不能用于增量。。。另一件事——有很多类型的“增量”-
abc
根据英文字母表是增量的,但也有“增量的”根据键盘:qwerty
这是键盘的最上面一行,或者asdf
这是键盘的主要一行。根据您的方案,qwerty
将被接受,而correcthorsebatterystaple
()将被拒绝。谢谢NHAHDH。。。。。我的意思是说增量数字,比如12345……等等,还有一系列字母,比如AAAA或BBB。。。。。。etc@sohal07您可能会从阅读中受益匪浅,因为它完全符合我的要求…..我刚刚将字符对更改为三重….再次更改为thanx。@sohal07:请注意,由于以下原因,此解决方案将拒绝01JOMflsjdsf
01
出现-您需要通过字符串连接生成长度为3或更长的“增量”序列。另一个quicj问题。。。我是否需要接受sohaal1???我拒绝了,因为有两个连续的字母“a”…@sohal07:当然-如果您删除重复字符的检查,那么它不会拒绝aaaaaaa
。如果您想使检查更严格(即只拒绝三倍以上,但允许双倍),则使用(?!*()\1{2})
而不是(?!*()\1)
。可能不可能与常规检查同时进行,因为这将在找到第一个匹配时停止,您可能希望显示所有攻击性子字符串。但是,您可以对失败的字符串执行第二次传递,搜索(.*)\1+|01 | 12 | 23 |…\yz
,并显示这些匹配项。
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;
}
}