3

ユーザーが入力したいくつかのデータを検証するためのphpコードを書いています.そのうちの1つは整数です$_REQUEST["age"].私は本当です。パラメータの値が整数かどうかを確認したいのですが、最初の 2 つの関数を正しく使用していますか、それとも何か不足していますか?gettype($_REQUEST["age"] == "integer"is_int($_REQUEST["age"])is_numeric($_REQUEST["age"])

タクンス

注:出力しようとしgettype($_REQUEST["age"])ましたstring

4

2 に答える 2

7

短縮版:

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

長いバージョン:

を使用したときにわかったように、問題はstringgettype$_REQUEST返すことです。その文字列が のように意味的に整数であったとしても、それは文字列型であり、整数型の変数ではありません。2 つのテストは異なるものをテストするため、異なる結果が得られます。16

  • is_numericPHP docsに従って、文字列に「オプションの符号、任意の桁数、オプションの小数部、およびオプションの指数部」が含まれているかどうかをテストします。あなたの場合、文字列には数字しか含まれていないため、テストは を返しますTrue
  • is_intは、変数の型が整数かどうかをテストします$_REQUEST

そのため、return while is_numericreturns : 文字列には数字のみが含まれます (したがって「数値」です) が、技術的には整数型ではなく文字列型です (したがって「int ではありません」)。もちろん、整数テストには十分ではありません。文字列に 10 進数がある場合、または科学表記法を使用している場合、つまり数値であるが整数ではない場合に返されるためです。Trueis_intFalseis_numericTrue

が整数であるかどうかをテストするに$_REQUESTは、技術的なタイプに関係なく、文字列内のすべての文字が数字であるかどうか (つまり、文字列全体が整数かどうか) をテストできます。これには、ctype_digitを使用できます。

ctype_digit($_REQUEST['age'])

これはTrueforを返しますが、 orを返し16ません- 数値の非整数から整数を取り除きます。16.516e0

于 2013-03-16T11:00:03.560 に答える
0
<?
     if(intval($_REQUEST["age"]) > 0):
        echo 'Ineger';
     else:
        echo 'something else';
     endif;
?>
于 2013-03-16T10:54:30.723 に答える