PHPでは、データフィルタリングと検証はユーザー入力の処理に不可欠です。 filter_var()を使用して単一のデータ値を検証することがよくありますが、フォームで送信された複数のフィールドなどのデータセットがある場合、各フィールドには異なる検証ルールが必要であるため、現時点でfilter_var_array()を使用することが非常に適切です。
filter_var_array()は、複数のデータ値をフィルタリングするためにPHPによって提供される関数です。通常、$ _getまたは$ _postのデータなどの連想配列です。この関数は、定義するフィルタールールに従って各フィールドを個別に処理できます。
関数プロトタイプは次のとおりです。
filter_var_array(array $data, array|int $definition, bool $add_empty = true): array|false|null
$データ:処理する配列データ。
$定義:フィルタリングルール。これは、整数(すべてのフィールドに同じフィルターを使用)または配列(異なるフィールドの異なるフィルターを定義する)である可能性があります。
$ add_empty :結果に一致するキーを含まないかどうか、デフォルトはtrueになります。
メールボックスと年齢のフィールドを備えたユーザーログインフォームがあるとします。メールボックス、年齢の整数検証を確認し、範囲を制限します。 filter_var_array()を使用して、次のように処理します。
$data = [
'email' => '[email protected]',
'age' => '25'
];
$filters = [
'email' => FILTER_VALIDATE_EMAIL,
'age' => [
'filter' => FILTER_VALIDATE_INT,
'options' => [
'min_range' => 18,
'max_range' => 99
]
]
];
$result = filter_var_array($data, $filters);
print_r($result);
出力は次のとおりです。
Array
(
[email] => [email protected]
[age] => 25
)
検証が失敗した場合、対応する値は虚偽になります。
Filter_var_array()は、明確な検証ルールとバッチ処理を定義できるため、フォームデータの処理に特に適しています。
$_POST = [
'username' => 'jack',
'email' => '[email protected]',
'age' => '17'
];
$rules = [
'username' => [
'filter' => FILTER_SANITIZE_STRING,
'flags' => FILTER_FLAG_NO_ENCODE_QUOTES
],
'email' => FILTER_VALIDATE_EMAIL,
'age' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 18]
]
];
$cleanData = filter_var_array($_POST, $rules);
print_r($cleanData);
この例では、年齢が18歳未満の場合、帰還年齢は虚偽であり、検証が失敗したことを促します。
filter_defaultおよびカスタムオプションを使用してデフォルト値を設定することもできます。また、フィールドが欠落しているときに意味のある出力を取得することもできます。
$data = [
'email' => 'wrong-format',
// 'age' => missing
];
$rules = [
'email' => FILTER_VALIDATE_EMAIL,
'age' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['default' => 18]
]
];
$result = filter_var_array($data, $rules);
print_r($result);
出力:
Array
(
[email] => false
[age] => 18
)
サードパーティAPIから送信されたデータを受信した場合、 Filter_var_array()を使用すると、データセキュリティを迅速に確保できます。
$json = file_get_contents('https://api.gitbox.net/user/input');
$input = json_decode($json, true);
$filters = [
'email' => FILTER_VALIDATE_EMAIL,
'subscription' => FILTER_VALIDATE_BOOLEAN
];
$validated = filter_var_array($input, $filters);
受信$データが配列でない場合、 filter_var_array()はfalseを返します。
一部のキーが$の定義ではないが、 $ add_Emptyがtrueに設定されている場合、それらはまだnullの値で戻り結果に表示されます。
データを検証するのではなく、データをクリーニングしているタイプFilter_Sanitize_*のフィルターを使用するには注意が必要です。
filter_var_array()は、データのセットの検証とクリーニングをバッチにするのに役立つ非常に強力なツールであり、コードをより簡潔で保守可能にします。フォームデータ、APIリクエスト、またはマルチフィールド検証が必要なシナリオで輝くことがあります。
Filter_var_array()を合理的に使用することを学ぶと、PHPプロジェクトでのデータ処理のセキュリティと効率を大幅に改善できるようになります。