Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】FILTER_SANITIZE_NUMBER_FLOAT定数の使い方

FILTER_SANITIZE_NUMBER_FLOAT定数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

FILTER_SANITIZE_NUMBER_FLOAT定数は、入力値から浮動小数点数(小数を含む数値)として有効な文字のみを抽出し、それ以外の不要な文字を除去するためのサニタイズフィルターの動作を表す定数です。この定数は、主にPHPのfilter_var()関数などのフィルタリング関数と組み合わせて使用され、ユーザーからの入力データなどを安全な形式に整形する際に非常に役立ちます。

具体的には、与えられた文字列の中から、数字(0-9)、小数点(.)、プラス記号(+)、マイナス記号(-)、そして指数表記のための文字(e, E)のみを残し、それ以外のすべての文字を取り除きます。例えば、「$123.45yen」という文字列をこのフィルターで処理すると、「123.45」という浮動小数点数として認識できる形式に変換されます。また、「--1.2abc」のような文字列からは「-1.2」が抽出されます。

この定数を使用することで、開発者は入力されたデータに数値以外の文字が含まれていても、それを安全な数値形式に変換できます。これにより、データベースへの不適切なデータ保存を防いだり、数値計算を安全に行ったりする目的で利用されます。特にウェブアプリケーションにおいて、フォームからの数値入力を受け付ける際には、データの整合性を保ち、セキュリティを向上させるために、このようなサニタイズ処理を行うことが強く推奨されます。

構文(syntax)

1<?php
2$input_string = "abc123.45def";
3$sanitized_float = filter_var($input_string, FILTER_SANITIZE_NUMBER_FLOAT);

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHP FILTER_SANITIZE_NUMBER_FLOATで数値整形する

1<?php
2
3/**
4 * FILTER_SANITIZE_NUMBER_FLOAT の使用例
5 *
6 * この定数は、PHPのフィルター機能 (`filter_var` や `filter_input` など) で使用され、
7 * 文字列から浮動小数点数として有効な文字(数字 `0-9`、小数点 `.`、符号 `+` `-`)以外の文字を除去します。
8 *
9 * 主にユーザーからの数値入力や、データベースに格納する前のデータクリーンアップに利用されます。
10 * デフォルトでは、千の位の区切り文字(カンマなど)は削除されます。
11 */
12function demonstrateNumberFloatSanitization(): void
13{
14    echo "--- FILTER_SANITIZE_NUMBER_FLOAT の使用例 ---\n\n";
15
16    // サニタイズ処理の対象となる、様々な形式の文字列の例
17    $inputs = [
18        "1,234.56円",               // カンマと通貨記号を含む
19        "金額は -987.65 ユーロです",  // スペース、記号、通貨記号を含む
20        "0.00%割引",                // パーセント記号を含む
21        "これは数字ではありません",     // 数字を含まない文字列
22        "  123.45   ",             // 前後のスペースを含む
23        "123456",                   // 小数点を含まない整数
24        "+50.00",                   // 正の符号を含む
25        "1.2.3.4",                  // 複数の小数点を含む場合 (最初の小数点のみが有効となる挙動)
26        "-,+100.00",                // 複数の符号を含む場合 (最初の符号のみが有効となる挙動)
27    ];
28
29    foreach ($inputs as $index => $input) {
30        // filter_var 関数を使用し、文字列に FILTER_SANITIZE_NUMBER_FLOAT フィルターを適用します。
31        // この処理により、浮動小数点数として有効な文字 (0-9, ., +, -) のみが文字列に残ります。
32        $sanitizedValue = filter_var($input, FILTER_SANITIZE_NUMBER_FLOAT);
33
34        echo "元の文字列 " . ($index + 1) . ": '{$input}'\n";
35        echo "サニタイズ後 " . ($index + 1) . ": '{$sanitizedValue}'\n\n";
36    }
37}
38
39// サニタイズ処理のデモンストレーション関数を呼び出し
40demonstrateNumberFloatSanitization();

PHPのFILTER_SANITIZE_NUMBER_FLOATは、PHP 8で利用できる定数です。引数や戻り値は持たず、filter_varなどの関数に指定することで、文字列を浮動小数点数として安全な形式にサニタイズ(無害化)します。

このフィルターは、入力文字列から数字(0-9)、小数点(.)、符号(+、-)以外の文字をすべて除去します。「1,234.56円」という文字列は「1234.56」となり、千の位の区切り文字(カンマなど)は削除されます。複数の小数点や符号がある場合、最初のものだけが有効として扱われます。

主にユーザーからの数値入力やデータベース保存前のデータクリーンアップに利用され、外部からの不要な文字や不正なデータを取り除き、セキュリティとデータ整合性を高めます。

FILTER_SANITIZE_NUMBER_FLOATは、文字列から数字、小数点、符号のみを抽出するサニタイズ(無害化)フィルターです。このフィルターは、入力が有効な数値であることの検証ではなく、不要な文字を除去する目的で使用されます。特に、千の位の区切り文字であるカンマは自動的に削除されるため、元の書式を維持したい場合は注意が必要です。複数の小数点や符号が含まれる場合、最初の有効なもの以外は除去されます。サニタイズされた結果は文字列型であるため、数値として計算に利用する際は、別途floatval()などで明示的に数値型へ変換してください。

関連コンテンツ