検索

ホームページ  >  に質問  >  本文

PHP文字列が整数のみで構成されているかどうかを確認する

ユーザーが入力したデータの 1 つが整数であることを検証するための PHP コードを作成しています。 を使用する場合は、$_REQUEST["age"] を使用してデータを取得します。 gettype($ _REQUEST["age"]) == "integer"is_int($_REQUEST["age"]) は両方とも、この値が整数かどうかをチェックするときに false を返しますが、 use is_numeric($_REQUEST["age"]) の場合に true を返します。パラメータの値が整数であるかどうか、最初の 2 つの関数を正しく使用しているか、それとも何かが不足しているかを確認したいと考えています。

###ありがとう###

注:

gettype($_REQUEST["age"])

を出力しようとしましたが、string が返されました。

P粉788765679P粉788765679458日前651

全員に返信(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

    string を返すことです。文字列が意味的に整数 (16 など) であっても、それは依然として文字列型であり、整数型変数ではありません。これら 2 つのテストで異なる結果が得られる理由は、テストする内容が異なるためです。 is_numeric

      PHP ドキュメント
    • に従って、文字列に「オプションの記号、任意の桁数、オプションの小数部分、およびオプションの指数部分」が含まれているかどうかをテストします。あなたの場合、文字列には数字のみが含まれているため、テストは True を返します。 is_int 変数の型が整数かどうかをテストします。ただし、
    • $_REQUEST
    • によって返されるため、整数にはなりません。 これが、is_numeric
    True

    を返し、is_intFalse を返す理由です。文字列には数字のみが含まれます (つまり、「数値」)。ただし、技術的には依然として文字列型であり、整数型ではありません (つまり、「int」ではありません)。もちろん、is_numeric は整数のテストには十分ではありません。文字列に小数が含まれている場合、または科学表記法が使用されている場合は、整数ではなく数値である True が返されるからです。 $_REQUEST が整数であるかどうかをテストするには、技術的な種類に関係なく、文字列内のすべての文字が数字である (つまり、文字列全体が整数である) かどうかをテストできます。これには、

    ctype_digit

    : を使用できます。 リーリー これは、16 に対して

    True

    を返しますが、16.5 または 16e0 に対しては True を返しません - 次のように整数以外の数値から整数をフィルタリングできます。

    返事
    0
  • キャンセル返事