filter_input with 0返回false

时间:2016-01-26 09:23:27

标签: php filter-input

我现在正在使用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是假的价值吗?

1 个答案:

答案 0 :(得分:2)

0是PHP中的 falsey 值。 if (0)false

此外,您正在使用 sanitisation 过滤器,它基本上不会失败。您希望使用 FILTER_VALIDATE_INT 验证输入是否为整数。

此外,filter_input此处返回falsenull0。他们都是 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';
}