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 <?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 ?>