ユーザー入力を扱う場合、データを検証して整合性を確保することが重要です。一般的な検証タスクの 1 つは、変数が整数を表しているかどうかを確認することです。 PHP はこの目的のために is_int() 関数を提供していますが、常に望ましい結果が得られるとは限りません。
is_int() を使用すると誤検知が返される可能性があります整数のように見えても、関数によって整数として認識されない値の場合。たとえば、ユーザーがページ番号として「1」を入力した場合を考えてみましょう:
<code class="php">$page = $_GET['p'];</code>
この場合、$page には文字列「1」が割り当てられ、結果は is_int($page ) false を返します。
変数が整数かどうかを確実にチェックするには、より正確な結果が得られる代替メソッドの使用を検討してください。
FILTER_VALIDATE_INT フィルターは、整数入力を検証するために使用できます:
<code class="php">if (filter_var($page, FILTER_VALIDATE_INT) === false) { // Not an integer }</code>
出力:
TEST -1: -1 (type:integer) Your variable is an integer ✔ TEST 0 : 0 (type:integer) is an integer ✔ TEST 1 : 42 (type:integer) is an integer ✔ TEST 2 : 4.2 (type:double) is not an integer ✘ TEST 3 : 0.42 (type:double) is not an integer ✘ TEST 4 : 42 (type:double) is an integer ✔ TEST 5 : 42 (type:string) is an integer ✔ TEST 6 : a42 (type:string) is not an integer ✘ TEST 7 : 42a (type:string) is not an integer ✘ TEST 8 : 36 (type:integer) is an integer ✔ TEST 9 : 1337 (type:double) is an integer ✔
変数の文字列表現とその整数表現を比較すると、それが整数であるかどうかも明らかになります:
<code class="php">if (strval($page) !== strval(intval($page))) { // Not an integer }</code>
出力:
TEST -1: -1 (type:integer) Your variable is an integer ✔ TEST 0 : 0 (type:integer) is an integer ✔ TEST 1 : 42 (type:integer) is an integer ✔ TEST 2 : 4.2 (type:double) is not an integer ✘ TEST 3 : 0.42 (type:double) is not an integer ✘ TEST 4 : 42 (type:double) is an integer ✔ TEST 5 : 42 (type:string) is an integer ✔ TEST 6 : a42 (type:string) is not an integer ✘ TEST 7 : 42a (type:string) is not an integer ✘ TEST 8 : 36 (type:integer) is an integer ✔ TEST 9 : 1337 (type:double) is an integer ✔
ctype_digital 関数を使用すると、正の数と 0 をチェックできます:
<code class="php">if (!ctype_digit(strval($page))) { // Not an integer }</code>
出力:
TEST -1: -1 (type:integer) # Your variable is not an integer ✘ TEST 0 : 0 (type:integer) is an integer ✔ TEST 1 : 42 (type:integer) is an integer ✔ TEST 2 : 4.2 (type:double) is not an integer ✘ TEST 3 : 0.42 (type:double) is not an integer ✘ TEST 4 : 42 (type:double) is an integer ✔ TEST 5 : 42 (type:string) is an integer ✔ TEST 6 : a42 (type:string) is not an integer ✘ TEST 7 : 42a (type:string) is not an integer ✘ TEST 8 : 36 (type:integer) is an integer ✔ TEST 9 : 1337 (type:double) is an integer ✔
正規表現は、整数の検証にも使用できます:
<code class="php">if (!preg_match('/^-?\d+$/', $page)) { // Not an integer }</code>
出力:
TEST -1: -1 (type:integer) Your variable is an integer ✔ TEST 0 : 0 (type:integer) is an integer ✔ TEST 1 : 42 (type:integer) is an integer ✔ TEST 2 : 4.2 (type:double) is not an integer ✘ TEST 3 : 0.42 (type:double) is not an integer ✘ TEST 4 : 42 (type:double) is an integer ✔ TEST 5 : 42 (type:string) is an integer ✔ TEST 6 : a42 (type:string) is not an integer ✘ TEST 7 : 42a (type:string) is not an integer ✘ TEST 8 : 36 (type:integer) is an integer ✔ TEST 9 : 1337 (type:double) is an integer ✔
以上がPHP で変数が整数を表しているかどうかを確実に確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。