我正在編寫PHP程式碼來驗證使用者輸入的一些數據,其中之一是整數,我使用$_REQUEST["age"]
來取得它,當我用gettype($ _REQUEST["age"]) == "integer"
和is_int($_REQUEST["age"])
檢查這個值是否為整數時,兩者都會回傳false,但是當我使用is_numeric($_REQUEST["age"])
時傳回true。我想要檢查參數的值是否為整數,我是否正確使用了前兩個函數,還是我漏掉了什麼?
謝謝
注意:我嘗試輸出gettype($_REQUEST["age"])
,它給我回傳string
P粉1077720152023-09-22 09:25:38
簡短版本:
#使用ctype_digit($_REQUEST['age'])
詳細版本:
#你的問題是,當你使用gettype
時,$_REQUEST
#回傳一個字串。即使字串在語義上是一個整數,例如16
,它仍然是一個字串類型,而不是整數類型的變數。你從這兩個測試中得到不同的結果是因為它們測試的是不同的東西:
is_numeric
測試一個字串是否包含一個"可選符號、任意數量的數字、可選的小數部分和可選的指數部分",根據PHP文檔。在你的情況下,字串只包含數字,所以測試傳回True
。 is_int
測試變數的類型是否為整數 - 但它不會是整數,因為它是由$_REQUEST
傳回的。 這就是為什麼is_numeric
返回True
而is_int
傳回False
的原因:該字串只包含數字(所以是" numeric"),但技術上仍然是一個字串類型,而不是整數類型(所以不是"int")。當然,is_numeric
對於整數測試來說是不夠的,因為如果字串有小數或使用科學計數法,它將傳回True
,即是數字但不是整數。
為了測試$_REQUEST
是否為整數,無論技術類型如何,你可以測試字串中的所有字元是否都是數字(因此整個字串是一個整數)。為此,你可以使用ctype_digit:
ctype_digit($_REQUEST['age'])
這將對16
傳回True
,但對16.5
或16e0
不回傳True
# - 這樣就可以將整數從非整數的數字中篩選出來。