PHPで数値の判定を行う際に欠かせない関数がis_numeric()
です。この関数を正しく理解して使うことで、より安全で信頼性の高いプログラムを書くことができます。今回は、is_numeric()
関数の基本的な使い方から、実際の開発現場での応用例まで詳しく解説します。
is_numeric関数とは?
is_numeric()
は、指定された値が数値または数値文字列かどうかを判定するPHPの組み込み関数です。戻り値はtrue
(数値の場合)またはfalse
(数値以外の場合)のブール値となります。
基本的な構文
is_numeric(mixed $value): bool
パラメータ:
$value
:判定したい値(任意の型)
戻り値:
bool
:数値の場合はtrue
、そうでなければfalse
基本的な使い方
まずは基本的な使用例を見てみましょう。
<?php
// 整数の場合
var_dump(is_numeric(123)); // bool(true)
var_dump(is_numeric(-456)); // bool(true)
// 浮動小数点数の場合
var_dump(is_numeric(3.14)); // bool(true)
var_dump(is_numeric(-2.5)); // bool(true)
// 文字列の数値の場合
var_dump(is_numeric("123")); // bool(true)
var_dump(is_numeric("3.14")); // bool(true)
var_dump(is_numeric("-456")); // bool(true)
// 数値以外の場合
var_dump(is_numeric("hello")); // bool(false)
var_dump(is_numeric("123abc")); // bool(false)
var_dump(is_numeric("")); // bool(false)
?>
is_numeric関数が判定できる値の種類
is_numeric()
関数は以下の形式の値を数値として認識します:
1. 整数(正の数・負の数・ゼロ)
is_numeric(0); // true
is_numeric(123); // true
is_numeric(-789); // true
2. 浮動小数点数
is_numeric(3.14); // true
is_numeric(-2.5); // true
is_numeric(0.0); // true
3. 数値文字列
is_numeric("123"); // true
is_numeric("3.14"); // true
is_numeric("-456"); // true
4. 科学記数法
is_numeric("1e10"); // true
is_numeric("1E-5"); // true
is_numeric("2.5e3"); // true
5. 16進数表記
is_numeric("0x1A"); // true
is_numeric("0xFF"); // true
注意すべきポイント
1. 先頭・末尾の空白文字は無視される
is_numeric(" 123 "); // true
is_numeric("\t456\n"); // true
2. 空文字列は数値ではない
is_numeric(""); // false
is_numeric(" "); // false
3. 数値以外の文字が混在する場合は false
is_numeric("123abc"); // false
is_numeric("abc123"); // false
is_numeric("12.34.56"); // false
4. 特殊な値の判定
is_numeric(null); // false
is_numeric(true); // false
is_numeric(false); // false
is_numeric([]); // false
実際の開発での活用例
1. フォームバリデーション
function validateAge($age) {
if (!is_numeric($age)) {
return "年齢は数値で入力してください";
}
$age = (int)$age;
if ($age < 0 || $age > 150) {
return "年齢は0以上150以下で入力してください";
}
return true;
}
// 使用例
$userAge = $_POST['age'] ?? '';
$result = validateAge($userAge);
if ($result !== true) {
echo $result;
}
2. 配列の数値フィルタリング
$mixedArray = ["123", "hello", 456, "3.14", "world", -789];
$numericValues = array_filter($mixedArray, 'is_numeric');
print_r($numericValues);
// 出力: Array([0] => 123, [2] => 456, [3] => 3.14, [5] => -789)
3. データベースの値チェック
function sanitizeNumericInput($value) {
if (!is_numeric($value)) {
throw new InvalidArgumentException("数値が必要です");
}
return is_int($value) ? $value : (float)$value;
}
// 使用例
try {
$price = sanitizeNumericInput($_POST['price']);
// データベースに安全に保存
} catch (InvalidArgumentException $e) {
echo "エラー: " . $e->getMessage();
}
類似関数との比較
is_int() vs is_numeric()
$value = "123";
var_dump(is_int($value)); // false(文字列なので)
var_dump(is_numeric($value)); // true(数値文字列なので)
is_float() vs is_numeric()
$value = "3.14";
var_dump(is_float($value)); // false(文字列なので)
var_dump(is_numeric($value)); // true(数値文字列なので)
ctype_digit() vs is_numeric()
$value = "123";
var_dump(ctype_digit($value)); // true(正の整数文字列)
var_dump(is_numeric($value)); // true
$value = "-123";
var_dump(ctype_digit($value)); // false(負の数は不可)
var_dump(is_numeric($value)); // true(負の数も可)
パフォーマンスの考慮事項
is_numeric()
は高速な関数ですが、大量のデータを処理する際は以下のような最適化を検討できます:
// より厳密な整数チェックが必要な場合
function isStrictInteger($value) {
return is_int($value) || (is_string($value) && ctype_digit($value));
}
// 浮動小数点数を含む数値チェック
function isNumericValue($value) {
return is_numeric($value) && !is_bool($value);
}
まとめ
is_numeric()
関数は、PHPで数値判定を行う際の強力なツールです。この関数を使うことで、ユーザー入力の検証、データの型チェック、配列のフィルタリングなど、様々な場面で安全なプログラムを書くことができます。
重要なポイント:
- 数値と数値文字列の両方を判定できる
- 科学記数法や16進数表記も認識する
- 空白文字は無視される
- 空文字列や非数値文字列は
false
を返す - 他の型判定関数と組み合わせることで、より精密な判定が可能
PHPでの数値処理において、is_numeric()
関数は必須の知識です。この記事を参考に、実際のプロジェクトでぜひ活用してみてください。