我正在解决一个挑战算法,并被告知要创建一个密码验证程序,该程序将检查:
密码长度不小于6并且不大于20。
它必须至少具有[A-Z]中的字符
它必须至少包含[a-z]中的字符
它必须至少有一个数字字符[0-9]
我编写了此函数以对其进行验证:
<?php
function Validate($input){
$length = strlen($input);
if($length < 6 || $length > 20){
return 'False';
}
if( !preg_match('/[0-9]+/', $input) ){
return 'False';
}
if( !preg_match('/[A-Z]+/', $input) ){
return 'False';
}
if( !preg_match('/[a-z]+/', $input) ){
return 'False';
}
return 'True';
}
?>
挑战报告说我的函数在四(4)个测试案例中有两(2)个失败。请任何人帮助我提供任何可能的测试案例,以指出我的功能缺少什么吗?
答案 0 :(得分:5)
正如注释已经指出的那样,您正在从函数中返回字符串,而不是布尔值。但是,您不需要这种肿的逻辑来检查密码要求。我建议在此处将preg_match
与单个正则表达式结合使用:
function Validate($input) {
return preg_match("/(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{6,20}/", $input));
}
顺便说一下,the logic in your current function is working,我不明白为什么代码测试应该有问题。也许您的返回类型应该不是是字符串。
答案 1 :(得分:0)
此Validate
函数无论输入如何都返回一个真值-因此,使用有效密码进行的任何测试都会成功,而使用无效密码进行的任何测试都会失败。
有关PHP中正确与错误的详细信息:http://fi2.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting