PHP filter_input验证INT

med*_*edk 3 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');
}
Run Code Online (Sandbox Code Playgroud)

"数字"输入将从包含0到10的选项发送.

问题是如果number = 0,则返回"Error".

这有什么问题?

谢谢

ker*_*ero 9

这是因为!0是真的.为什么?通过添加!您正在进行布尔检查,因此您的变量将被转换.并根据手册:

转换为布尔值时,会考虑以下值FALSE:

  • 布尔FALSE本身

  • 整数0(零)

  • 浮点数0.0(零)

  • 空字符串和字符串 "0"

  • ...

因此整数0转换为false所有其他整数转换为true.

这就是你需要进行类型安全检查的原因,false或者null因为这些值filter_input()因某些原因失败而返回的原因.

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

  • @medk我添加了其他信息 (2认同)