PHP関数のis_numericもis_intも指定値が数値かどうか調べる関数です。「123」や「100」など、整数かどうかのチェックでは同じように使えますが、フォーム入力値の数値チェックなどでは注意が必要です。
is_numericもis_intも整数のチェックには使える
is_numericもis_intも指定値が数値(整数)かどうかチェックするのに使えます。たとえば、次のチェックでは共に「数値です」と表示されます。
<?php if (is_numeric(100)) { echo "数値です(is_numeric)"; //出力される } if (is_int(100)) { echo "数値です(is_int)"; //出力される } ?>
実行結果
数値です(is_numeric)数値です(is_int)
さまざまな処理で整数が求められる場面では同じように使えます。
フォーム入力値の数値チェックにはis_numeric
ただし、フォーム入力値に対して同じような数値チェックを行うと、is_intでは数値と判断されません。
次のようなフォームに「100」と入力してチェックすると、is_numericのみ「数値です」と表示されます。
<?php header("Content-Type: text/html; charset=UTF-8"); ?> <html> <head> <title>フォームデータの数値チェック</title> </head> <body> <?php if (is_numeric(@$_POST["t1"])) { echo "数値です(is_numeric)"; } if (is_int(@$_POST["t1"])) { echo "数値です(is_int)"; } ?> <form method="POST" action=""> <table> <tr> <td><input type="text" name="t1"></td> <td><input type="submit" value="送信"></td> </tr> </table> </form> </body> </html>
実行結果
これは、フォーム入力値は常に文字列だからです。入力された「100」などの数値は数値文字列になります。入力された内容をそのままチェックする場合は、数値文字列も含めて数値だと判断するis_numeric関数を使います。
is_intは「整数」かどうかのチェックに使う
is_numericもis_intも数値チェックに使えると書きましたが、もう少し正確に違いを説明すると次のようになります。
- is_numeric — 数値(整数・小数など)の場合はtrueを返す
- is_int — 整数の場合はtrueを返す
つまり、is_numeric関数は小数などを含めた数値全体にtrueを返しますが、is_intは整数のみにtrueを返します。
<?php if (is_numeric(12.34)) { echo "数値です(is_numeric)"; //出力される } if (is_int(12.34)) { echo "数値です(is_int)"; } ?>
実行結果
数値です(is_numeric)