搜尋

首頁  >  問答  >  主體

檢查一個PHP字串是否僅由整數組成

我正在編寫PHP程式碼來驗證使用者輸入的一些數據,其中之一是整數,我使用$_REQUEST["age"]來取得它,當我用gettype($ _REQUEST["age"]) == "integer"is_int($_REQUEST["age"])檢查這個值是否為整數時,兩者都會回傳false,但是當我使用is_numeric($_REQUEST["age"])時傳回true。我想要檢查參數的值是否為整數,我是否正確使用了前兩個函數,還是我漏掉了什麼?

謝謝

注意:我嘗試輸出gettype($_REQUEST["age"]),它給我回傳string

P粉788765679P粉788765679431 天前632

全部回覆(2)我來回復

  • P粉293550575

    P粉2935505752023-09-22 16:02:18

    雷雷

    回覆
    0
  • P粉107772015

    P粉1077720152023-09-22 09:25:38

    簡短版本:

    #

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

    #

    詳細版本:

    #

    你的問題是,當你使用gettype時,$_REQUEST#回傳一個字串。即使字串在語義上是一個整數,例如16,它仍然是一個字串類型,而不是整數類型的變數。你從這兩個測試中得到不同的結果是因為它們測試的是不同的東西:

    • is_numeric測試一個字串是否包含一個"可選符號、任意數量的數字、可選的小數部分和可選的指數部分",根據PHP文檔。在你的情況下,字串只包含數字,所以測試傳回True
    • is_int測試變數的類型是否為整數 - 但它不會是整數,因為它是由$_REQUEST傳回的。

    這就是為什麼is_numeric返回Trueis_int傳回False的原因:該字串只包含數字(所以是" numeric"),但技術上仍然是一個字串類型,而不是整數類型(所以不是"int")。當然,is_numeric對於整數測試來說是不夠的,因為如果字串有小數或使用科學計數法,它將傳回True,即是數字但不是整數。

    為了測試$_REQUEST是否為整數,無論技術類型如何,你可以測試字串中的所有字元是否都是數字(因此整個字串是一個整數)。為此,你可以使用ctype_digit

    ctype_digit($_REQUEST['age'])

    這將對16傳回True,但對16.516e0不回傳True# - 這樣就可以將整數從非整數的數字中篩選出來。

    回覆
    0
  • 取消回覆