PHP filter_input验证INT

时间:2014-06-20 22:34:20

标签: php filter

我有这段代码:

$range = array (
    'options' => array (
        'min_range' => 0,
        'max_range' => 10
    )
);

if (!$number = filter_input(INPUT_POST, 'number', FILTER_VALIDATE_INT, $range)) {
    exit ('Error');
}

“数字”输入将从包含0到10的选项发送。

问题是如果number = 0,则返回“Error”。

这有什么问题?

由于

2 个答案:

答案 0 :(得分:9)

这是因为!0是真的。为什么?通过添加!,您正在进行布尔检查,因此您的变量将被转换。根据{{​​3}}:

  

转换为布尔值时,以下值被视为FALSE

     
      
  • 布尔值FALSE本身

  •   
  • 整数0(零)

  •   
  • 浮动0.0(零)

  •   
  • 空字符串,字符串"0"

  •   
  • ...

  •   

所以整数0转换为false,而所有其他整数都转换为true

这就是为什么您需要为falsenull执行manual的原因,因为如果由于某种原因失败,filter_input()会返回值。

$number = filter_input(INPUT_POST, 'number', FILTER_VALIDATE_INT, $range);
if ($number === false) {
    //filter failed
}
if ($number === null) {
    //variable was not set
}

答案 1 :(得分:0)

我找到了解决方案!

if (
    !$number = filter_input(INPUT_POST, 'number', FILTER_VALIDATE_INT, $range) === 0 
    || !filter_input(INPUT_POST, 'number', FILTER_VALIDATE_INT, $range) === FALSE) 
{
    exit ('Error');
}