我的验证器功能出了什么问题?

时间:2018-09-07 10:22:24

标签: php

我正在解决一个挑战算法,并被告知要创建一个密码验证程序,该程序将检查:

  • 密码长度不小于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)个失败。请任何人帮助我提供任何可能的测试案例,以指出我的功能缺少什么吗?

2 个答案:

答案 0 :(得分:5)

正如注释已经指出的那样,您正在从函数中返回字符串,而不是布尔值。但是,您不需要这种肿的逻辑来检查密码要求。我建议在此处将preg_match与单个正则表达式结合使用:

function Validate($input) {
    return preg_match("/(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{6,20}/", $input));
}

Demo

顺便说一下,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