PHPでプログラミングをしていると、ユーザーからの入力値や変数の中身が「本当に数値なのか?」を判定したい場面が頻繁に発生します。
例えば、フォームから送信された年齢がきちんと数字で入力されているか、データベースから取得したIDが整数であるかなどをチェックする場合です。
しかし、PHPには数値を判定するための関数が複数用意されており、「is_numeric()
とis_int()
はどう違うの?」「マイナス記号や小数点はどう扱われるの?」といった点で混乱してしまう方も少なくありません。
そこでこの記事では、数値を判定する主要な関数の違いと、それぞれの正しい使い分けを、豊富なサンプルコードと共に初心者にもわかりやすく徹底的に解説します。
【本記事の信頼性】
- 執筆者は元エンジニア
- 大手プログラミングスクールのWebディレクター兼ライターを経験
- 自らも地元密着型のプログラミングスクールを運営
受講生から評判の良いプログラミングスクール
スクール |
特徴 |
受講料金 |
大手比較サイトで4年連続人気NO.1!受講生からの評判も非常に高く、Web系のエンジニアを目指すならRUNTEQ一択。 | 550,000円(給付金適用あり) | |
月単価80万円以上の現役エンジニア講師による指導!一度入会すればサポートは半永久的。 | 498,000円 | |
格安で質の高いWeb制作スキルを習得したい人におすすめ!業界最安級の料金でありながら、コミュニティやサポートが充実。 | 129,800円~ | |
完全無料でプログラミングが学べる貴重なスクール!最短1ヶ月で卒業可能。ゼロスク運営会社への就職もできる。 | 無料 | |
長期間に渡って学習し、希少人材を目指す人に最適なスクール!受講料は高いものの、高収入を得られる人材を目指せる。 | 96~132万円 |
【結論】目的別!PHPで数値を判定する最適な関数
まず最初に、この記事の結論となる「目的別の最適な関数の選び方」を示します。
自分のやりたいことに最も近いものを選んでください。
やりたいこと | 最適な関数 | 特徴 |
---|---|---|
フォーム入力など、広い意味で数値か判定したい(整数、小数、マイナス記号、数字の文字列など) | is_numeric() |
最も判定が緩やか。ただし、意図しない値もtrue になる可能性に注意。 |
変数の「データ型」が厳密に整数型(int)か判定したい | is_int() |
最も判定が厳格。数字の文字列(例: "123" )はfalse になる。 |
文字列が「0」から「9」の数字だけで構成されているか判定したい | ctype_digit() |
郵便番号や会員番号など、記号を含まない数字の文字列の判定に最適。 |
このように、PHPでは「数値かどうか」をどのような厳密さで判定したいかによって、使うべき関数が変わってきます。
それでは、以下の項目にて、各関数の詳細な挙動を見ていきましょう。
is_numeric() – 幅広く数値をチェックする
is_numeric()
は、引数が数値または「数値形式の文字列」である場合にtrue
を返す、最もポピュラーな関数です。
フォームから送られてくる値はすべて文字列として扱われるため、ユーザー入力のバリデーションで非常によく使われます。
この関数の特徴は、判定範囲が非常に広いことです。
整数、浮動小数点数(小数)、さらにはマイナス記号や科学技術表記(1e4
など)を含む文字列もtrue
と判定します。
サンプルコード
<?php
var_dump(is_numeric(123)); // int(123)
var_dump(is_numeric("123")); // string("123")
var_dump(is_numeric("1.23")); // string("1.23")
var_dump(is_numeric("-123")); // string("-123")
var_dump(is_numeric("1e4")); // string("1e4") -> 科学技術表記
var_dump(is_numeric("Hello")); // string("Hello")
var_dump(is_numeric("1,000")); // string("1,000") -> カンマはfalse
var_dump(is_numeric("123")); // string("123") -> 全角数字はfalse
?>
実行結果
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(false)
bool(false)
bool(false)
注意点
is_numeric()
は非常に便利ですが、その判定の広さが逆に意図しない結果を招くこともあります。
例えば、整数だけを期待している場面で小数点の入力を許可してしまったり、科学技術表記を数値として通してしまったりする可能性があることを覚えておく必要があります。
is_int() – 厳密に「整数型」かをチェックする
is_int()
は、引数のデータ型が整数(integer)であるかどうかを判定します。
is_numeric()
が値の「見た目」をチェックするのに対し、is_int()
は変数の「種類」そのものをチェックする、より厳格な関数です。
そのため、たとえ見た目が数字であっても、それが文字列型であればfalse
を返します。
サンプルコード
<?php
var_dump(is_int(123)); // int(123)
var_dump(is_int("123")); // string("123") -> 文字列なのでfalse
var_dump(is_int(1.23)); // float(1.23) -> 浮動小数点数なのでfalse
var_dump(is_int(-123)); // int(-123)
?>
実行結果
bool(true)
bool(false)
bool(false)
bool(true)
この関数は、プログラムの内部処理で、変数が間違いなく整数型であることを保証したい場合などに有効です。
ユーザー入力をチェックする目的には、ほとんどの場合で不向きと言えるでしょう。
ctype_digit() – 文字列が「数字のみ」で構成されているかチェックする
ctype_digit()
は、引数として渡された文字列に含まれるすべての文字が、10進数の数字(0〜9)であるかどうかを判定します。
is_numeric()
と似ていますが、判定はより厳しく、マイナス記号や小数点が含まれているとfalse
を返します。
あくまで「0123456789」の文字だけで構成されているかをチェックする関数です。
サンプルコード
<?php
var_dump(ctype_digit("123")); // string("123")
var_dump(ctype_digit("1.23")); // string("1.23") -> 小数点は数字ではないのでfalse
var_dump(ctype_digit("-123")); // string("-123") -> マイナス記号は数字ではないのでfalse
var_dump(ctype_digit("Hello")); // string("Hello")
var_dump(ctype_digit("123")); // string("123") -> 全角数字はfalse
?>
実行結果
bool(true)
bool(false)
bool(false)
bool(false)
bool(false)
この関数は、ユーザーIDや郵便番号、電話番号のように、記号を含まない純粋な数字の文字列を検証したい場合に非常に役立ちます。
【徹底比較】is_numeric / is_int / ctype_digit の違い一覧表
上記3つの関数の挙動の違いを、様々なパターンの値で比較した一覧表を以下に示します。
この表を見れば、それぞれの関数の特徴が一目瞭然になるはずです。
判定する値 | is_numeric() |
is_int() |
ctype_digit() |
備考 |
---|---|---|---|---|
123 (整数) |
true | true | (エラー) | ctype_digit は文字列専用 |
"123" (数字の文字列) |
true | false | true | is_int は型をチェック |
1.23 (小数) |
true | false | (エラー) | |
"1.23" (小数の文字列) |
true | false | false | ctype_digit は小数点を許可しない |
-123 (負の整数) |
true | true | (エラー) | |
"-123" (負の数字の文字列) |
true | false | false | ctype_digit は記号を許可しない |
"1e4" (科学技術表記) |
true | false | false | is_numeric の注意点 |
"0xFF" (16進数文字列) |
true | false | false | is_numeric の注意点 |
"Hello" (ただの文字列) |
false | false | false | |
true (真偽値) |
false | false | (エラー) |
まとめ
今回は、PHPで数値かどうかを判定するための主要な3つの関数、is_numeric()
、is_int()
、ctype_digit()
について、その違いと使い分けを解説しました。
なお、PHPを体系的に学んだり、PHPのスキルを高めたりするためには、プログラミングスクールを利用するのも有効です。
細かな疑問がすぐに解決するだけでなく、現役エンジニアが「質の高いポートフォリオ」を作成するための手助けをしてくれたり、エンジニア就職・転職のコツを教えてくれたりするなど、様々なメリットがありますので、独学に疲れた方は検討してみてはいかがでしょうか。