现有如下函数:
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的正则表达式哪里错了呢?谢谢
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的正则表达式哪里错了呢?谢谢
$str = 0;
echo empty($str) ? 'y' : 'n';//print y
if(!empty($str_gpcstring))
这个位置的判断就没通过?不可能啊,我测试了,我在这句话线面加了一个echo 'ssss';他显示了啊
{
$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));
{
$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)
*/?>
函数返回的是整型,匹配就是 1 ,不匹配就是 0!!!所以无论你丢什么进去都是整型!!!