【PHP8.x】filter_var関数の使い方
filter_var関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
『filter_var関数は、指定したフィルタを使って変数を検証(バリデーション)または無害化(サニタイズ)する処理を実行する関数です。この関数は、主にユーザー入力などの外部から受け取ったデータを安全かつ期待する形式で扱うために利用されます。第一引数に処理したい変数を、第二引数に適用するフィルタの種類をFILTER_VALIDATE_EMAILのような定義済み定数で指定します。フィルタには大きく分けて2種類あり、「検証フィルタ」はデータが特定の形式(メールアドレス、URL、数値など)に合致しているかを確認します。形式が正しい場合はそのデータを、正しくない場合はfalseを返します。一方、「無害化フィルタ」はデータから不要または潜在的に危険な文字(HTMLタグなど)を除去したり、特定の形式に変換したりします。処理に失敗した場合はfalseが返されるため、例えばフィルタリング後の値が0の場合と処理に失敗した場合を区別するには、戻り値の評価に厳密な比較演算子(===)を使用することが重要です。
構文(syntax)
1<?php 2$email = "test@example.com"; 3$isValidEmail = filter_var($email, FILTER_VALIDATE_EMAIL); 4?>
引数(parameters)
mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0
- mixed $value: フィルタリングする値。文字列、整数、配列など、様々な型の値を受け取れます。
- int $filter = FILTER_DEFAULT: 適用するフィルタの種類を指定する整数。例えば、メールアドレスの検証には
FILTER_VALIDATE_EMAILを指定します。省略時はFILTER_DEFAULTとなり、PHP の設定で定義されているデフォルトのフィルタが適用されます。 - array|int $options = 0: フィルタのオプションを指定する配列または整数。フィルタの種類によって、許容される値の範囲やフォーマットなどを細かく設定できます。0 はオプションなしを意味します。
戻り値(return)
mixed
指定された値をフィルター処理またはサニタイズした結果を返します。フィルター処理に失敗した場合は false を返します。
サンプルコード
PHP filter_varでEメールを検証する
1<?php 2 3/** 4 * Eメールアドレスが有効な形式か検証し、結果を表示します。 5 * 6 * @param string $email 検証するEメールアドレス 7 * @return void 8 */ 9function checkEmailAddress(string $email): void 10{ 11 // filter_var() 関数と FILTER_VALIDATE_EMAIL フィルタを使用してEメールを検証します。 12 // 検証に成功した場合、この関数はEメールアドレスの文字列そのものを返します。 13 // 検証に失敗した場合、この関数は bool 値の false を返します。 14 $validatedEmail = filter_var($email, FILTER_VALIDATE_EMAIL); 15 16 if ($validatedEmail === false) { 17 echo "入力値 '{$email}' は、有効なEメールアドレスの形式ではありません。" . PHP_EOL; 18 } else { 19 echo "入力値 '{$validatedEmail}' は、有効なEメールアドレスの形式です。" . PHP_EOL; 20 } 21} 22 23// 検証対象のEメールアドレスの配列 24$emailsToTest = [ 25 'test@example.com', // 有効な例 26 'user.name+tag@domain.co.jp',// 有効な例 27 'invalid-email-format', // 無効な例 28 'test@.com', // 無効な例 29 '@example.com', // 無効な例 30]; 31 32// 配列内の各Eメールアドレスを検証 33foreach ($emailsToTest as $email) { 34 checkEmailAddress($email); 35} 36 37?>
このサンプルコードは、PHPのfilter_var関数を使用して、指定された文字列が有効なEメールアドレスの形式であるかどうかを検証する方法を示しています。filter_var関数は、データの検証(バリデーション)や無害化(サニタイズ)を行うための強力な組み込み関数です。
この関数は、第一引数に検証したいデータ(この例では変数$email)を、第二引数に適用するフィルタの種類を指定します。サンプルコードでは、Eメールアドレスの形式を検証するための定義済みフィルタであるFILTER_VALIDATE_EMAILを使用しています。
この関数の特徴は、検証結果によって戻り値が異なる点です。検証に成功した場合、この関数は検証されたデータ、つまりEメールアドレスの文字列そのものを返します。一方、検証に失敗した場合は、論理値のfalseを返します。サンプル内のcheckEmailAddress関数では、この戻り値が厳密にfalseであるかを判定することで、形式が有効か無効かに応じて適切なメッセージを表示しています。このようにfilter_var関数は、ユーザーからの入力などを簡単かつ安全に検証する際に非常に便利です。
filter_var関数をEメール検証で使う際、戻り値のチェックには === false という厳密な比較を用いることが重要です。この関数は検証に失敗するとfalseを返しますが、成功した場合はEメールアドレスの文字列を返すため、== で比較すると意図しない結果を招く可能性があるからです。また、この検証はあくまでEメールアドレスの「形式」が正しいかを確認するものであり、そのアドレスが「実際に存在するか」や「メールを受信できるか」までは保証しません。そのため、ユーザー登録のような重要な機能では、この形式チェックに加えて、実際に確認メールを送信するなどの多段階の検証を組み合わせることが、より安全なシステムを構築するために推奨されます。
PHP: filter_var でメールアドレスを検証する
1<?php 2 3/** 4 * メールアドレスのリストを検証し、結果を出力します。 5 * 6 * この関数は、filter_var と FILTER_VALIDATE_EMAIL を使用して、 7 * 与えられたメールアドレスの形式が有効かどうかをチェックします。 8 */ 9function checkEmailAddresses(): void 10{ 11 // 検証するメールアドレスのサンプルリスト 12 $emails = [ 13 'test@example.com', // 有効な形式 14 'invalid-email-address', // 無効な形式 15 'user.name+tag@domain.co.jp',// 有効な形式 16 'test@.invalid-domain', // 無効な形式 17 '' // 空文字列(無効) 18 ]; 19 20 echo "メールアドレスの検証を開始します。\n\n"; 21 22 foreach ($emails as $email) { 23 // filter_var() を使ってメールアドレスの形式を検証します。 24 // 第2引数に FILTER_VALIDATE_EMAIL を指定します。 25 // 検証に成功した場合はメールアドレス文字列を、失敗した場合は false を返します。 26 $validatedEmail = filter_var($email, FILTER_VALIDATE_EMAIL); 27 28 // 戻り値が false かどうかを厳密に比較 (===) して結果を判定します。 29 if ($validatedEmail === false) { 30 printf("「%s」は、有効なメールアドレス形式ではありません。\n", $email); 31 } else { 32 // 検証成功時は、サニタイズされた値が出力されることがあります。 33 printf("「%s」は、有効なメールアドレス形式です。\n", $validatedEmail); 34 } 35 } 36} 37 38// 関数を実行して結果を表示します。 39checkEmailAddresses();
filter_var()関数は、変数の値が特定のルールに沿っているかを検証(バリデーション)したり、安全な形式に整えたり(サニタイズ)するための関数です。このサンプルコードでは、複数の文字列が有効なメールアドレスの形式であるかをfilter_var()を用いて判定しています。
filter_var()の第一引数には検証したいデータ(この例では変数$email)、第二引数には適用したいフィルタの種類を指定します。ここではFILTER_VALIDATE_EMAILという定数を指定することで、「メールアドレスとして有効な形式か」というルールで検証を行っています。
この関数の戻り値の挙動が重要です。検証に成功した場合、filter_var()は検証された値(この場合はメールアドレス文字列)を返します。しかし、指定された形式に合致しない場合や、値が空文字列であるなど検証に失敗した場合は、論理値のfalseを返します。
サンプルコードでは、この戻り値をif ($validatedEmail === false)という条件で判定しています。===演算子でfalseと厳密に比較することで、検証の成否を正確に判断し、結果に応じたメッセージを表示しています。このようにfilter_var()を使えば、複雑な処理を自前で実装することなく、簡単かつ安全にデータの検証が可能です。
filter_var関数でメールアドレスを検証する際、戻り値の扱いに注意が必要です。検証に失敗するとfalseが返るため、サンプルコードのように==ではなく厳密な比較演算子===を使って判定してください。これにより、空文字列のようなfalseと見なされうる値を誤って無効と判定するのを防げます。また、FILTER_VALIDATE_EMAILはメールアドレスの「形式」がRFCに準拠しているかをチェックするだけで、そのアドレスが実際に存在するかまでは保証しません。ユーザー登録などでメールアドレスの有効性を確実に確認したい場合は、別途、確認メールを送信するなどの仕組みが必要です。この関数はユーザーからの入力を安全に扱うための第一歩として有効ですが、その役割と限界を理解して使いましょう。