【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()などで明示的に数値型へ変換してください。