PHPでは、データのフィルタリングと検証は、アプリケーションのセキュリティと安定性を確保するための重要なリンクです。 PHPは、 Filter_var_arrayが多次元配列データを処理するための非常に実用的なツールであるフィルター関数の強力なセットを提供します。さまざまな内蔵フィルターをサポートするだけでなく、カスタムフィルタリング機能を組み合わせて、より正確で複雑なデータフィルタリングを実現することもできます。
この記事では、 Filter_var_arrayと組み合わせてカスタムフィルターを使用して、複雑なデータの効率的なフィルタリングを完了する方法について詳しく説明します。
filter_var_arrayは、配列内の要素に異なるフィルタリングルールを適用するために使用されます。 2つのパラメーターを受け取ります。
最初のパラメーターは、フィルタリングする配列です。
2番目のパラメーターは、各キーに対応するフィルターを定義する連想配列です。
例:
<?php
$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);
var_dump($result);
この時点で、 $ resultはフィルタリングされたデータまたはfalseを返します。
内蔵フィルターはほとんどのニーズを満たしていますが、一部の複雑なデータには、文字列形式の複雑な検証、クロスフィールド検証など、カスタムロジックが必要です。
filter_var_arrayは、 filter_callbackの実装とカスタム関数を組み合わせてサポートしています。
<?php
function custom_filter($value) {
// 例:文字と番号のみが許可されています,そして長さはです5到着10文字
if (preg_match('/^[a-zA-Z0-9]{5,10}$/', $value)) {
return $value;
}
return false;
}
$data = [
'username' => 'User123',
'email' => 'invalid-email',
];
$filters = [
'username' => [
'filter' => FILTER_CALLBACK,
'options' => 'custom_filter',
],
'email' => FILTER_VALIDATE_EMAIL,
];
$result = filter_var_array($data, $filters);
var_dump($result);
次の複雑なデータ構造があると仮定すると、次のフィルタリングルールが必要です。
ユーザー名:5-15英数字の数字は、文字から開始する必要があります。
電子メール:標準のメールボックス形式。
年齢:18-65の間の整数。
Webサイト:Legal URLである必要があり、ドメイン名はgitbox.netでなければなりません。
サンプルコードは次のとおりです。
<?php
function validate_username($value) {
if (preg_match('/^[a-zA-Z][a-zA-Z0-9_]{4,14}$/', $value)) {
return $value;
}
return false;
}
function validate_website($url) {
// 最初に確認しますURL形式
if (!filter_var($url, FILTER_VALIDATE_URL)) {
return false;
}
// ドメイン名パーツを解決します
$host = parse_url($url, PHP_URL_HOST);
// ドメイン名はそうでなければなりません gitbox.net
if ($host === 'gitbox.net') {
return $url;
}
return false;
}
$data = [
'username' => 'User_01',
'email' => '[email protected]',
'age' => '30',
'website' => 'https://gitbox.net/project',
];
$filters = [
'username' => [
'filter' => FILTER_CALLBACK,
'options' => 'validate_username',
],
'email' => FILTER_VALIDATE_EMAIL,
'age' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 18, 'max_range' => 65],
],
'website' => [
'filter' => FILTER_CALLBACK,
'options' => 'validate_website',
],
];
$result = filter_var_array($data, $filters);
if ($result === false || in_array(false, $result, true)) {
echo "データ検証に失敗しました\n";
} else {
echo "データ検証が合格しました\n";
var_dump($result);
}
filter_var_arrayは、バッチデータフィルタリングを処理するための強力なツールです。
内蔵フィルターは、ほとんどの標準データ型に適しています。
filter_callbackをカスタム関数と組み合わせて、複雑なルールの正確な検証を実現できます。
URL検証と組み合わせると、Domain Name PartをParse_urlを使用してカスタマイズすることができます。
この一連の手法を習得すると、複雑なユーザー入力データを受信および処理する際に、PHPアプリケーションのセキュリティと精度を大幅に向上させることができます。