2011-09-01 22 views
3

我想用PHP filer_var功能,但它返回一个错误的结果,它似乎并没有考虑到的范围:PHP过滤器变种返回一个错误的结果

$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并回显“一个整数”。

这里有什么问题?

谢谢。

+2

事实上,证实了PHP 5.3在Windows上。我看不出任何语法错误。 'filter_var()'真的是这辆车吗? –

+0

是的,我在win7 x86上使用PHP 5.3.5 – medk

+1

啊,这的确是语法。看到我的答案。 –

回答

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, 
); 

你不及格,这么显示的行为是好的。

+3

这很容易出错 - 它应该被设计成不同的IMO。 –

+0

好的我刚刚发现了这个问题。 min_range和max_range应放入主数组中的“选项”数组中,如果您重新检查我的原始代码,您将发现错误。甚至没有“默认”和“标志”。不管怎么说,还是要谢谢你。 – medk

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) 
1

版本5.3.8看来是修正了#47745这意味着FILTER_VALIDATE_INT没有允许最低整数。

你可能要检查的文件是EXT /过滤/ logical_filters.c

void php_filter_int(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */ 
{ 
....