2011-09-01 55 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) /* {{{ */ 
{ 
....