PHP で変数が整数を表しているかどうかを確実に確認するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-10-19 13:32:01
オリジナル
834 人が閲覧しました

How to Reliably Check if a Variable Represents an Integer in PHP?

PHP で変数が整数であるかどうかを確認する

ユーザー入力を扱う場合、データを検証して整合性を確保することが重要です。一般的な検証タスクの 1 つは、変数が整数を表しているかどうかを確認することです。 PHP はこの目的のために is_int() 関数を提供していますが、常に望ましい結果が得られるとは限りません。

is_int() が期待どおりに動作しない理由

is_int() を使用すると誤検知が返される可能性があります整数のように見えても、関数によって整数として認識されない値の場合。たとえば、ユーザーがページ番号として「1」を入力した場合を考えてみましょう:

<code class="php">$page = $_GET['p'];</code>
ログイン後にコピー

この場合、$page には文字列「1」が割り当てられ、結果は is_int($page ) false を返します。

代替検証メソッド

変数が整数かどうかを確実にチェックするには、より正確な結果が得られる代替メソッドの使用を検討してください。

1. FILTER_VALIDATE_INT 方法

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 ✔
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

2.キャスト比較方法

変数の文字列表現とその整数表現を比較すると、それが整数であるかどうかも明らかになります:

<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 ✔
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

3. CTYPE_DIGIT 方法

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 ✔
ログイン後にコピー

4。正規表現の方法

正規表現は、整数の検証にも使用できます:

<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 サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート