はじめに
この記事では、PHPで数値かどうかを判定する is_numeric()
と ctype_digit()
の違いについて、基本的な視点からまとめた備忘録です。
内容に不備などがございましたら、お手数ですが優しくご指摘いただけますと幸いです。
書こうと思ったきっかけ
個人的にPHPのキャッチアップをしたくて、勉強している初学者による備忘録として記録しています。
条件分岐などで使う "数値かどうか?" の判定処理を正しく理解したいと思いました。
また、現時点で自分の中で使い分けがあいまいだったため、自分の言葉でしっかり説明できるようになることをゴールとしています。
内容
PHPには数値判定に使える関数として is_numeric()
と ctype_digit()
の2つがありますが、目的や動作が異なります。
is_numeric() の特徴
- 判定内容:変数が数字または数値形式の文字列であるかを調べる
var_dump(is_numeric("123")); // true
var_dump(is_numeric(123)); // true
var_dump(is_numeric("123.45")); // true
var_dump(is_numeric("-123")); // true
var_dump(is_numeric("1e10")); // true
var_dump(is_numeric("abc")); // false
確認画面
想定通りの結果となっていることが確認できました!
参考文献
ctype_digit() の特徴
- 判定内容:数字かどうかを調べる
var_dump(ctype_digit("123")); // true
var_dump(ctype_digit("0123")); // true
var_dump(ctype_digit("123.45")); // false
var_dump(ctype_digit("-123")); // false
var_dump(ctype_digit(123)); // false ← int型なので false!
確認画面
こちらも想定通りの結果となっていることが確認できました!
学んだこと(使い分けの判断)
-
ユーザー入力が純粋な「整数の文字列」か調べたい場合
→ctype_digit()
を使う
(例:会員ID、郵便番号、年齢など、数字だけで構成されている必要がある場合) -
「数値っぽいかどうか」広く判定したい場合
→is_numeric()
を使う
(例:フォームから受け取った価格、計算対象の値、マイナスや小数も含む場合)
例で比較
$value = "123.45";
var_dump(is_numeric($value)); // true
var_dump(ctype_digit($value)); // false
確認画面
まとめ
ここまで読んでいただき、ありがとうございました!
関数名 | 判定対象 | 判定内容 | 例 |
---|---|---|---|
is_numeric | 数値型 or 数値っぽい文字列 | 整数・小数・符号付き・指数表記などOK | "123", 123.45, "-1", "1e3" |
ctype_digit | 文字列のみ | 「0〜9」だけの文字列(整数のみ) | "123", "00123" は OK、123(int)は NG |
この2つの違いを理解して使い分けることで、入力チェックやバリデーション処理をより正確に行えると感じました...!
参考にした文献