《PHP8上級試験対策》filter_var() × FILTER_VALIDATE_FLOAT の動作を正しく理解する

  • URLをコピーしました!

はじめに

PHPの filter_var() は、入力値の検証に使われる便利な関数です。
中でも FILTER_VALIDATE_FLOAT は「小数点を含む数値を検証する」と誤解されやすいフィルタですが、実際にはもっと柔軟に「浮動小数点として解釈可能かどうか」をチェックします。
この記事では、PHP8 上級試験の問題例をベースに、その動作を正確に理解していきます。

キーワード: filter_var / FILTER_VALIDATE_FLOAT / 浮動小数点 / 数値検証 / PHP8上級試験対策

目次

🧩 基本構文

filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed

filter_var() は、指定したフィルタで値を検証します。
FILTER_VALIDATE_FLOAT を指定すると、「与えられた値が 浮動小数点として有効か」をチェックし、成功すれば float 型に変換して返します。失敗した場合は false を返します。

🧪 サンプルコード

<?php
declare(strict_types=1);
error_reporting(-1);

$fn = function(mixed $v){
    var_dump($v);
    $r = filter_var($v, FILTER_VALIDATE_FLOAT);
    var_dump($r);
};

$fn(1_000);
$fn('abc');
$fn('-1.234e+4');

🧾 実行結果

int(1000)
float(1000)
string(3) "abc"
bool(false)
string(9) "-1.234e+4"
float(-12340

🔍 各結果の意味

入力値説明戻り値
1_000PHP8 では数値リテラルの区切り文字 _ は無視されるため int(1000) になる。float として検証成功。float(1000)
'abc'数値として解釈できないため検証失敗。false
'-1.234e+4'指数表記 の文字列。浮動小数点として有効。float(-12340)

💡 注意ポイント
FILTER_VALIDATE_FLOAT は小数点の有無を調べる」と思い込むのは誤りです。実際には、以下のような形式がすべて有効です。

filter_var("1.23", FILTER_VALIDATE_FLOAT);    // OK
filter_var("1e3", FILTER_VALIDATE_FLOAT);     // OK(指数表記)
filter_var("-1.234E+4", FILTER_VALIDATE_FLOAT); // OK
filter_var("abc", FILTER_VALIDATE_FLOAT);     // false

つまり、「浮動小数点表現として妥当か」を確認するフィルタです。

図解:FILTER_VALIDATE_FLOATの動作イメージ

┌─────────────────────────────────────────┐
│ filter_var($v, FILTER_VALIDATE_FLOAT)   │
└─────────────────────────────────────────┘
           │
           ├─ 数値または数値文字列 → floatに変換して返す
           │    例: "1.23" → 1.23
           │        "1e3"  → 1000.0
           │        1000   → 1000.0
           │
           └─ 数値として解釈できない文字列 → false
                 例: "abc" → false

🪶 まとめ

項目内容
関数filter_var()
フィルタFILTER_VALIDATE_FLOAT
成功条件値が浮動小数点として有効(例: "1.23", "1e3", "-1.234E+4"
失敗条件数値に変換できない文字列(例: "abc"
戻り値成功時:float値、失敗時:false
試験ポイント「小数点検証」ではなく「float検証」である点を理解しておく

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次