密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
如果符合要求输出:OK,否则输出NG
<?php
//分类来解决情况比较多或者稍微复杂一点的情况
$str = '密码字符串';
//1、判断长度
if(!isLength($str)){
echo 'NG'.PHP_EOL;
}
//2、判断包括大小写字母.数字.其它符号,以上四种至少三种
else if(!isMulti($str)){
echo 'NG'.PHP_EOL;
}
//3、判断不能有相同长度超2的子串重复
else if(hasSubstr($str)){
echo 'NG'.PHP_EOL;
}else{
echo 'OK'.PHP_EOL;
}
function isLength($str){
$len=strlen($str);
if($len>8) return true;
else return false;
}
function isMulti($str){
$myType=0;
//有数字
if(preg_match('/\d/',$str)) $myType++;
//有大写字母
if(preg_match('/[A-Z]/',$str)) $myType++;
//有小写写字母
if(preg_match('/[a-z]/',$str)) $myType++;
//有其它字符
$str2=preg_replace('/[A-Za-z0-9]/','',$str);
$len2=strlen($str2);
if($len2>=1) $myType++;
if($myType>=3) return true;
else return false;
}
function hasSubstr($str){
$len=strlen($str);
for($i=0;$i<$len;$i++){
$ii=$i;
for($j=$ii+2;$j<$len;$j++){
$jj=$j;
$count=0;
while($jj<$len&&$count<=2&&$str[$ii]==$str[$jj]){
//echo $str[$ii]." ".$str[$jj].PHP_EOL;
$ii++;
$jj++;
$count++;
}
if($count==3) return true;
}
}
return false;
}
?>