Я хотел использовать функцию 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 и эхо-сигнал «целое число».
В чем проблема?
Благодарю.
В массиве «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, );
вы не проходите это так, чтобы отображаемое поведение было в порядке.
$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)
Версия 5.3.8 имеет фиксированную ошибку # 47745, которая означает, что FILTER_VALIDATE_INT не допускает минимальное целое число.
Файл, который вы хотите проверить, – ext / filter / logical_filters.c
void php_filter_int(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */ { ....