php实现 密码验证合格程序(复杂问题分类,超简单的)(分类+规范编码)

一、总结

一句话总结:复杂问题分类,超简单的。分类+规范编码。

 

1、写的时候判断  不能有相同长度超2的子串重复  的时候,子串重复写成隔2位置了?

应该是任意的

47             for($j=$ii+2;$j<$len;$j++){


 

2、分类,把大问题化小,就会非常简单?

4     //1、判断长度
5 if(!isLength($str)){
6 echo 'NG'.PHP_EOL;
7 }
8 //2、判断包括大小写字母.数字.其它符号,以上四种至少三种
9 else if(!isMulti($str)){
10 echo 'NG'.PHP_EOL;
11 }
12 //3、判断不能有相同长度超2的子串重复
13 else if(hasSubstr($str)){
14 echo 'NG'.PHP_EOL;
15 }else{
16 echo 'OK'.PHP_EOL;
17 }


 

3、写的时候判断  不能有相同长度超2的子串重复  的时候,返回逻辑出错?

有相同子串返回true,没有相同子串返回false,逻辑弄反了

56                 if($count==3) return true;
57
58 }
59
60 }
61 return false;


 

4、多组输入如何解决?

while

3 while($str=trim(fgets(STDIN))){


 

5、判断 包括大小写字母.数字.其它符号,以上四种至少三种 怎么写?

分类+正则+统计分类合格情况

26 function isMulti($str){
27 $myType=0;
28 //有数字
29 if(preg_match('/\d/',$str)) $myType++;
30 //有大写字母
31 if(preg_match('/[A-Z]/',$str)) $myType++;
32 //有小写写字母
33 if(preg_match('/[a-z]/',$str)) $myType++;
34 //有其它字符
35 $str2=preg_replace('/[A-Za-z0-9]/','',$str);
36 $len2=strlen($str2);
37 if($len2>=1) $myType++;
38
39 if($myType>=3) return true;
40 else return false;
41 }


 

 

二、密码验证合格程序

题目描述




密码要求:

 

 

 

1.长度超过8位

 

 

 

2.包括大小写字母.数字.其它符号,以上四种至少三种

 

 

 

3.不能有相同长度超2的子串重复

 

 

 

说明:长度超过2的子串

 


输入描述:

一组或多组长度超过2的子符串。每组占一行

输出描述:

如果符合要求输出:OK,否则输出NG



示例1




输入

复制


021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000



输出

复制


OK
NG
NG
OK


 

代码:



1 <?php
2 //分类来解决情况比较多或者稍微复杂一点的情况
3 while($str=trim(fgets(STDIN))){
4 //1、判断长度
5 if(!isLength($str)){
6 echo 'NG'.PHP_EOL;
7 }
8 //2、判断包括大小写字母.数字.其它符号,以上四种至少三种
9 else if(!isMulti($str)){
10 echo 'NG'.PHP_EOL;
11 }
12 //3、判断不能有相同长度超2的子串重复
13 else if(hasSubstr($str)){
14 echo 'NG'.PHP_EOL;
15 }else{
16 echo 'OK'.PHP_EOL;
17 }
18 }
19
20 function isLength($str){
21 $len=strlen($str);
22 if($len>8) return true;
23 else return false;
24 }
25
26 function isMulti($str){
27 $myType=0;
28 //有数字
29 if(preg_match('/\d/',$str)) $myType++;
30 //有大写字母
31 if(preg_match('/[A-Z]/',$str)) $myType++;
32 //有小写写字母
33 if(preg_match('/[a-z]/',$str)) $myType++;
34 //有其它字符
35 $str2=preg_replace('/[A-Za-z0-9]/','',$str);
36 $len2=strlen($str2);
37 if($len2>=1) $myType++;
38
39 if($myType>=3) return true;
40 else return false;
41 }
42
43 function hasSubstr($str){
44 $len=strlen($str);
45 for($i=0;$i<$len;$i++){
46 $ii=$i;
47 for($j=$ii+2;$j<$len;$j++){
48 $jj=$j;
49 $count=0;
50 while($jj<$len&&$count<=2&&$str[$ii]==$str[$jj]){
51 //echo $str[$ii]." ".$str[$jj].PHP_EOL;
52 $ii++;
53 $jj++;
54 $count++;
55 }
56 if($count==3) return true;
57
58 }
59
60 }
61 return false;
62 }
63
64 ?>