我想使用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并回显“整数”。
这里有什么问题?
感谢。
答案 0 :(得分:7)
“options”数组需要有一个名为“options”的成员。来自manual:
$options = array(
'options' => array(
'default' => 3, // value to return if the filter fails
// other options here
'min_range' => 0
),
'flags' => FILTER_FLAG_ALLOW_OCTAL,
);
你没有传递,所以显示的行为没问题。
答案 1 :(得分: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)
答案 2 :(得分:1)
版本5.3.8声称修复了错误#47745,这意味着FILTER_VALIDATE_INT不允许最小整数。
您可能要检查的文件是ext / filter / logical_filters.c
void php_filter_int(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
{
....