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

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

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

作成日: 更新日:

基本的な使い方

FILTER_SANITIZE_NUMBER_INT定数は、指定された値から数字(0-9)と符号(+または-)以外のすべての文字を取り除くためのサニタイズフィルターのIDを表す定数です。この定数を使用すると、ウェブフォームからのユーザー入力など、信頼できない情報から整数として扱われるべき数値だけを安全に抽出できます。

例えば、「User ID: 123-abc」のような文字列に対してこのフィルターを適用すると、「123」といった純粋な数字部分だけが抽出されます。これは、アプリケーションがユーザーから年齢や数量、IDなどの数値データを受け取る際に、意図しない文字が混入していても、それを除去し、期待される数値形式にデータを整形するために非常に役立ちます。

PHPでは、filter_var()関数やfilter_input()関数といったフィルタリング関数でデータのサニタイズを行う際に、第二引数(フィルターの種類)としてこの定数を指定します。これにより、入力データがデータベースに保存されたり、計算処理に使われたりする前に、不要な文字や潜在的な危険性のある文字が除去され、セキュリティの向上とデータの整合性の確保に貢献します。開発者はこの定数を活用することで、不正なデータ入力に対する堅牢なアプリケーションを構築できます。

構文(syntax)

1<?php
2$string_with_numbers = "ID: 123.45-ABC+XYZ";
3$sanitized_output = filter_var($string_with_numbers, FILTER_SANITIZE_NUMBER_INT);
4echo $sanitized_output;
5?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHP filter_varで整数文字列をサニタイズする

1<?php
2
3/**
4 * 入力文字列から符号付き整数を構成する文字のみを抽出し、サニタイズします。
5 *
6 * この関数は、`filter_var` と `FILTER_SANITIZE_NUMBER_INT` を使用して、
7 * 数字 (0-9)、プラス記号 (+)、マイナス記号 (-) 以外のすべての文字を削除します。
8 * これは、例えばユーザー入力からID番号や数量などの整数値を安全に抽出する際に役立ちます。
9 *
10 * @param string $input サニタイズする元の文字列。
11 * @return string サニタイズされた文字列。整数を構成する文字のみが含まれます。
12 */
13function sanitizeIntegerString(string $input): string
14{
15    // filter_var関数に元の文字列とFILTER_SANITIZE_NUMBER_INTフィルターを適用します。
16    // このフィルターは、数字、プラス記号、マイナス記号以外の文字をすべて削除します。
17    // 例: "ID-123abc" -> "-123"
18    // 例: "$1,234.56" -> "123456" (小数点やコンマも削除されます)
19    $sanitizedValue = filter_var($input, FILTER_SANITIZE_NUMBER_INT);
20
21    return $sanitizedValue !== false ? (string) $sanitizedValue : '';
22}
23
24// サンプルコード: 様々な入力に対してサニタイズを適用し、結果を表示します。
25echo "--- 数値文字列サニタイズの例 (FILTER_SANITIZE_NUMBER_INT) ---\n\n";
26
27$testCases = [
28    "ユーザーID: ABC-123_45DEF",
29    "価格: $1,234.50",
30    "数量: +50 units",
31    "負の値: -100.5",
32    "混合文字列: test123data456",
33    "数字と記号のみ: ---123+++45",
34    "空の文字列: ",
35    "純粋な数字: 98765",
36];
37
38foreach ($testCases as $originalInput) {
39    $sanitizedResult = sanitizeIntegerString($originalInput);
40
41    echo "元の入力: '{$originalInput}'\n";
42    echo "サニタイズ後: '{$sanitizedResult}'\n";
43    echo "---------------------------------------------------------\n\n";
44}
45
46?>

PHP 8で利用できるFILTER_SANITIZE_NUMBER_INTは、ウェブアプリケーションでユーザーからの入力値を安全に処理(サニタイズ)するためのフィルター定数です。この定数自体には引数や戻り値はありませんが、PHPの標準関数であるfilter_varと組み合わせて使用することで、特定のサニタイズ処理を実行します。

filter_var関数にFILTER_SANITIZE_NUMBER_INTを適用すると、指定された文字列から数字(0-9)、プラス記号(+)、マイナス記号(-)以外のすべての文字が削除されます。これにより、例えば「ID-123abc」という入力からは「-123」のように、整数を構成する文字だけを抽出できます。また、「$1,234.50」のような金額文字列からは「123450」と、小数点やカンマも取り除かれ、純粋な数字列が得られます。

この機能は、ウェブアプリケーションにおいて、ユーザーが入力した値の中からID番号、数量、金額などの整数値のみを安全に抽出したい場合に非常に役立ちます。不要な文字や悪意のあるスクリプトコードが混入するのを防ぎ、アプリケーションのセキュリティとデータの整合性を高めることができます。提示されたサンプルコードでは、様々な形式の文字列から、このフィルターによってどのように数字と符号のみが抽出されるかを確認できます。

このコードは、FILTER_SANITIZE_NUMBER_INTフィルターを使って、入力文字列から数字、プラス記号、マイナス記号以外の全ての文字を削除します。初心者が注意すべき点は、小数点やカンマなども除去されるため、「1,234.50」のような入力は「123450」となります。サニタイズ後の結果は常に文字列型で返されますので、算術演算を行う前にはintval()などで明示的に整数型に変換する必要があります。このフィルターは不要な文字を除去するサニタイズ処理であり、入力が「有効な数値形式」であるかを検証するものではありません。例えば「--123」のような結果も生成され得るため、実際に数値として利用する際はFILTER_VALIDATE_INTなどによる別途の入力検証を組み合わせることが、より安全なシステム構築に繋がります。

関連コンテンツ