3

我想使用 php filer_var 函数,但它返回了错误的结果,似乎它没有考虑范围:

$v = 54;

$int_opts = array (

    'min_range' => 0,
    'max_range' => 24

);

if ( filter_var($v, FILTER_VALIDATE_INT, $int_opts) ) echo 'an integer';

else echo 'not an integer';

这不应该是整数,因为 54 不在 0 和 24 之间,但它返回 true 并回显“整数”。

这里有什么问题?

谢谢。

4

3 回答 3

7

“options”数组需要有一个名为“options”的成员。从手册

$options = array(
    'options' => array(
        'default' => 3, // value to return if the filter fails
        // other options here
        'min_range' => 0
    ),
    'flags' => FILTER_FLAG_ALLOW_OCTAL,
);

你没有通过,所以显示的行为是好的。

于 2011-09-01T07:17:04.847 回答
1
$options = array(); 
$options['options']['min_range'] = 0; 
$options['options']['max_range'] = 24; 
$options['flags'] = FILTER_FLAG_ALLOW_OCTAL; 
var_dump(filter_var(54, FILTER_VALIDATE_INT, $options)); //bool(false)
var_dump(filter_var(21, FILTER_VALIDATE_INT, $options)); //int(21)

它以这种方式工作。

关于FILTER_FLAG_ALLOW_OCTAL

将从零 (0) 开始的输入视为八进制数。这仅允许后续数字为 0-7。根据这个:

var_dump(filter_var(06, FILTER_VALIDATE_INT, $options)); //int(6)
var_dump(filter_var(09, FILTER_VALIDATE_INT, $options)); //int(0)
于 2011-09-01T07:26:07.587 回答
1

版本 5.3.8 声称修复了错误 #47745,这意味着 FILTER_VALIDATE_INT 不允许使用最小整数。

您可能要检查的文件是 ext/filter/logical_filters.c

void php_filter_int(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
{
....
于 2011-09-01T07:33:36.083 回答