现有如下函数:
public static function func_GPCCheck($str_gpcstring, $str_rtntype, $int_minlength, $int_maxlength)//检查GET、POST、COOKIE参数是否合法
    {
        $bool_legal = false;
        if(!empty($str_gpcstring))
        {
            //echo "$str_rtntype  :  $str_gpcstring </br>";
            switch($str_rtntype)
            {
                case 'int' :
                    $bool_legal = (preg_match('/^[0-9]{' . $int_minlength . ',' . $int_maxlength . '}$/', $str_gpcstring)) || self::func_Error('GPC_Illegal');
                    break;
                case 'str' :
                    $bool_legal = (preg_match('/^[a-zA-Z0-9]{' . $int_minlength . ',' . $int_maxlength . '}$/', $str_gpcstring)) || self::func_Error('GPC_Illegal');
                    break;
                case 'file' :
                    $bool_legal = true;
                    break;
                default :
                    break;
            }
        }
        return $bool_legal;
    }调用方式1:
var_dump(cls_CoreFunc::func_GPCCheck('0', 'int', 0, 50));
很是奇怪,为啥会出错呢,应该0属于int,应该显示为true,结果却是false
调用方式2:
var_dump(cls_CoreFunc::func_GPCCheck('9', 'int', 0, 50));
只要传入的值不为0,就可以正常执行,可见程序没错
调用方式3:
var_dump(cls_CoreFunc::func_GPCCheck('00', 'int', 0, 50));
0 == 00 没错吧?,程序判断00是否为int也显示为true
请问为啥判断0时会出错呢?这个判断0为int的正则表达式哪里错了呢?谢谢

解决方案 »

  1.   


    $str = 0;
    echo empty($str) ? 'y' : 'n';//print  y
      

  2.   

    楼上的意思是
    if(!empty($str_gpcstring))
    这个位置的判断就没通过?不可能啊,我测试了,我在这句话线面加了一个echo 'ssss';他显示了啊
      

  3.   

     function func_GPCCheck($str_gpcstring, $str_rtntype, $int_minlength, $int_maxlength)//检查GET、POST、COOKIE参数是否合法
        {
            $bool_legal = false;
            if(is_string($str_gpcstring))
            {
                //echo "$str_rtntype  :  $str_gpcstring </br>";
                switch($str_rtntype)
                {
                    case 'int' :
                        $bool_legal = (preg_match('/^[0-9]{' . $int_minlength . ',' . $int_maxlength . '}$/', $str_gpcstring)) ;
                        break;
                    case 'str' :
                        $bool_legal = (preg_match('/^[a-zA-Z0-9]{' . $int_minlength . ',' . $int_maxlength . '}$/', $str_gpcstring)) ;
                        break;
                    case 'file' :
                        $bool_legal = true;
                        break;
                    default :
                        break;
                }
            }
            return $bool_legal;
        }
        var_dump(func_GPCCheck('0', 'int', 0, 50));
      

  4.   

    建议你查下  is_int   is_string  是否能满足要求
      

  5.   

    <?php//问题出在程序本身function func_GPCCheck($str_gpcstring, $str_rtntype, $int_minlength, $int_maxlength) //检查GET、POST、COOKIE参数是否合法
        {
            $bool_legal = false;
            if(isset($str_gpcstring) && $str_gpcstring != 0)
            {
                switch($str_rtntype)
                {
                    case 'int' :
                        $bool_legal = (preg_match("/^[0-9]{{$int_minlength},{$int_maxlength}}$/", $str_gpcstring));
                        break;
                    case 'str' :
                        $bool_legal = (preg_match("/^[a-zA-Z0-9]{{$int_minlength},{$int_maxlength}}$/", $str_gpcstring));
                        break;
                    case 'file' :
                        $bool_legal = true;
                        break;
                    default :
                        break;
                }
            }
            return $bool_legal;
        }
    //调用方式1:
    var_dump(func_GPCCheck('0', 'int', 0, 50));
    //很是奇怪,为啥会出错呢,应该0属于int,应该显示为true,结果却是false//调用方式2:
    var_dump(func_GPCCheck('9', 'int', 0, 50));
    //只要传入的值不为0,就可以正常执行,可见程序没错//调用方式3:
    var_dump(func_GPCCheck('00', 'int', 0, 50));
    //0 == 00 没错吧?,程序判断00是否为int也显示为true/*
    结果如下:
    bool(false)
    int(1)
    bool(false)
    */?>
      

  6.   

    错了,错了,一切都错了preg_match
    函数返回的是整型,匹配就是 1 ,不匹配就是 0!!!所以无论你丢什么进去都是整型!!!