我现在正在使用filter_input,我希望它在每个数字(0-9)上返回true,在非数字(a-z,A-Z等等)上返回false。
现在,我使用这个脚本(只是一个示例脚本,但想法是一样的):
<?php
$i = filter_input(INPUT_GET, 'i', FILTER_SANITIZE_NUMBER_INT);
if ($i)
{
echo 'good';
}
else
{
echo 'bad';
}
如果我使用1-9作为GET变量(如test.php?i=1
那样),则会显示good
。
如果我使用a-Z作为GET变量(如test.php?i=a
所示),则会显示bad
。到目前为止一切都很好。
但是如果我使用0作为GET变量,它也表现不好。变量可以是0,当GET变量为0时应该为真。
有人可以解释为什么0返回false吗?我的意思是设置了GET变量,0是一个数字。是因为0是假的价值吗?
答案 0 :(得分:2)
0
是PHP中的 falsey 值。 if (0)
为false
。
此外,您正在使用 sanitisation 过滤器,它基本上不会失败。您希望使用 FILTER_VALIDATE_INT
来验证输入是否为整数。
此外,filter_input
此处返回false
,null
或0
。他们都是 falsey ,意思是== false
。您需要明确区分它们:
$i = filter_input(INPUT_GET, 'i', FILTER_VALIDATE_INT);
if ($i === null) {
echo 'value not provided';
} else if ($i === false) {
echo 'invalid value';
} else {
echo 'good';
}