2013-03-16 92 views
3

我正在寫php代碼來驗證用戶輸入的一些數據,其中一個是整數,我使用$_REQUEST["age"]來獲取它,當我檢查if這個值是整數與gettype($_REQUEST["age"] == "integer"is_int($_REQUEST["age"])都給我虛假,但是當我使用is_numeric($_REQUEST["age"])是給我的真實。我想檢查參數的值是否是一個整數,我正確使用前兩個函數還是缺少一些東西?如何檢查一個字符串是否由PHP中的整數組成

Thakns

注:我試圖輸出gettype($_REQUEST["age"])它給了我string

回答

7

短版:

使用ctype_digit($_REQUEST['age'])

龍版本:

在使用gettype時發現的問題是:$_REQUEST返回字符串。即使該字符串是一個整數語義上,如16,它仍然是一個字符串類型,而不是一個整型變量。你得到來自兩個測試不同的結果,因爲他們測試不同的東西:

  • is_numeric測試一個字符串是否包含根據PHP docs一個「可選的符號,任意數量的數字,可選的小數部分和可選的指數部分」 。在你的情況下,字符串只包含數字,所以測試返回True
  • is_int測試變量的類型是否爲整數 - 它不會是這樣,因爲它是由$_REQUEST返回的。

這就是爲什麼is_numeric回報Trueis_int回報False:字符串僅包含數字(等「是數字」),但技術上仍然有一個字符串類型,而不是一個整數類型(因此「不是一個int 「)。當然,is_numeric不足以用於整數測試,因爲如果字符串有小數或使用科學記數法(即數字而不是整數),它將返回True

要測試$_REQUEST是否爲整數,無論​​技術類型如何,都可以測試字符串中的所有字符是否都是數字(因此整個字符串是整數)。爲此,您可以使用ctype_digit

ctype_digit($_REQUEST['age']) 

這將返回True16而不是16.516e0 - 淘汰從數字非整數的整數。

+0

太棒了!不知道這一點。 – finishingmove 2013-04-16 16:51:14

0
<? 
    if(intval($_REQUEST["age"]) > 0): 
     echo 'Ineger'; 
    else: 
     echo 'something else'; 
    endif; 
?> 
+0

'intval'計算整數值,它不測試它。如果$ _REQUEST [「age」]是一個非整數小數點,如4.2,則會打印「Integer」。它也不會捕獲負數,這仍然可以是整數。 – ASGM 2013-03-16 14:06:33

相關問題