php фильтр var возвращает неверный результат - PullRequest
3 голосов
/ 01 сентября 2011

Я хотел использовать функцию 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 и отображает "целое число".

В чем здесь проблема?

Спасибо.

Ответы [ 3 ]

7 голосов
/ 01 сентября 2011

В массиве "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,
);

Вы не проходите мимо, так что отображаемое поведение в порядке.

1 голос
/ 01 сентября 2011

Версия 5.3.8 подразумевает исправленную ошибку № 47745, из-за которой FILTER_VALIDATE_INT не допускал минимум целое число.

Файл, который вы, возможно, захотите проверить, это ext / filter / logic_filters.c

void php_filter_int(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
{
....
1 голос
/ 01 сентября 2011
$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)
...