ユーザーが入力したデータの 1 つが整数であることを検証するための PHP コードを作成しています。 を使用する場合は、
$_REQUEST["age"] を使用してデータを取得します。 gettype($ _REQUEST["age"]) == "integer"
と is_int($_REQUEST["age"])
は両方とも、この値が整数かどうかをチェックするときに false を返しますが、 use is_numeric($_REQUEST["age"])
の場合に true を返します。パラメータの値が整数であるかどうか、最初の 2 つの関数を正しく使用しているか、それとも何かが不足しているかを確認したいと考えています。
注:
gettype($_REQUEST["age"]) を出力しようとしましたが、string
が返されました。
リーリー
######短縮版: ######
使用 ctype_digit($_REQUEST['age'])
詳細バージョン:
あなたの問題は、gettype を使用すると、
$_REQUESTが
string
を返すことです。文字列が意味的に整数 (16
など) であっても、それは依然として文字列型であり、整数型変数ではありません。これら 2 つのテストで異なる結果が得られる理由は、テストする内容が異なるためです。is_numeric
PHP ドキュメント- に従って、文字列に「オプションの記号、任意の桁数、オプションの小数部分、およびオプションの指数部分」が含まれているかどうかをテストします。あなたの場合、文字列には数字のみが含まれているため、テストは
$_REQUEST- によって返されるため、整数にはなりません。
が
TrueTrue
を返します。is_int
変数の型が整数かどうかをテストします。ただし、これが、
is_numericを返し、
ctype_digitis_int
がFalse
を返す理由です。文字列には数字のみが含まれます (つまり、「数値」)。ただし、技術的には依然として文字列型であり、整数型ではありません (つまり、「int」ではありません)。もちろん、is_numeric
は整数のテストには十分ではありません。文字列に小数が含まれている場合、または科学表記法が使用されている場合は、整数ではなく数値であるTrue
が返されるからです。$_REQUEST
が整数であるかどうかをテストするには、技術的な種類に関係なく、文字列内のすべての文字が数字である (つまり、文字列全体が整数である) かどうかをテストできます。これには、:
Trueを使用できます。 リーリー
これは、16 に対してを返しますが、
16.5
または16e0
に対してはTrue
を返しません - 次のように整数以外の数値から整数をフィルタリングできます。