2016-01-26 40 views
-1

我使用filter_input現在,我希望它在每一個數字(0-9)和假非數字返回true(AZ,AZ等)filter_input 0返回false

現在,我使用這個腳本(只是一個示例腳本,但這個想法是一樣的):

<?php 

$i = filter_input(INPUT_GET, 'i', FILTER_SANITIZE_NUMBER_INT); 

if ($i) 
{ 
    echo 'good'; 
} 
else 
{ 
    echo 'bad'; 
} 

如果我使用1-9 GET變量(所以像test.php?i=1),它顯示good。 如果我使用a-Z作爲GET變量(與test.php?i=a類似),它將顯示bad。到現在爲止還挺好。

但是,如果我使用0作爲GET變量,它也表現不好。變量可以爲0,並且當GET變量爲0時應該爲真。

任何人都可以解釋爲什麼0返回false嗎?我的意思是設置GET變量,0是一個數字。僅僅因爲0是一個虛假的價值?

+0

'如果(is_int(I $)){' –

+0

返回壞,以及對0 –

回答

2

0是一個falsey值在PHP中。 if (0)false

此外,您正在使用衛生過濾器,它基本上不會失敗。您要使用FILTER_VALIDATE_INT驗證輸入是否爲整數。

此外,filter_input在此返回false,null0。他們都是平等的falsey,意思是== false。你需要它們之間的區分明確:

$i = filter_input(INPUT_GET, 'i', FILTER_VALIDATE_INT); 

if ($i === null) { 
    echo 'value not provided'; 
} else if ($i === false) { 
    echo 'invalid value'; 
} else { 
    echo 'good'; 
} 
+0

這不工作,當我使用0或az或者我離開它清空它仍然回報良好。 –

+0

@Joshua另請參見 – deceze