Caution
お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。
filter_var() / filter_input() 対応: PHP 5(2004)
入力値のバリデーションやサニタイズを行う関数です。外部から受け取ったデータの安全性を確保するために使用します。
構文
// 変数にフィルターを適用します。
filter_var($value, $filter, $options);
// $_GET, $_POST, $_COOKIE 等から値を取得してフィルターを適用します。
filter_input($type, $var_name, $filter, $options);
関数一覧
| 関数 | 概要 |
| filter_var($value, $filter, $options) | 変数にフィルターを適用し、バリデーションやサニタイズを行います。バリデーション失敗時は『false』を返します。 |
| filter_input($type, $var_name, $filter, $options) | 外部入力をフィルター付きで取得します。第1引数には『INPUT_GET』『INPUT_POST』『INPUT_COOKIE』などを指定します。 |
主なバリデーションフィルター
| フィルター | 概要 |
| FILTER_VALIDATE_EMAIL | メールアドレスの形式を検証します。 |
| FILTER_VALIDATE_URL | URLの形式を検証します。 |
| FILTER_VALIDATE_IP | IPアドレスの形式を検証します。『FILTER_FLAG_IPV4』『FILTER_FLAG_IPV6』でバージョンを限定できます。 |
| FILTER_VALIDATE_INT | 整数値を検証します。オプションで最小値・最大値の範囲を指定できます。 |
| FILTER_VALIDATE_FLOAT | 浮動小数点数を検証します。 |
| FILTER_VALIDATE_BOOLEAN | 真偽値を検証します。『true』『yes』『on』『1』を『true』として認識します。※ 文字列 'false' を渡すと true ではなく null が返ります。直感に反する挙動なので注意してください。 |
| FILTER_VALIDATE_DOMAIN | ドメイン名の形式を検証します。PHP 7.0 以降で利用可能です。 |
主なサニタイズフィルター
| フィルター | 概要 |
| FILTER_SANITIZE_EMAIL | メールアドレスとして不正な文字を除去します。 |
| FILTER_SANITIZE_URL | URLとして不正な文字を除去します。 |
| FILTER_SANITIZE_NUMBER_INT | 数字、プラス記号、マイナス記号以外の文字を除去します。 |
| FILTER_SANITIZE_NUMBER_FLOAT | 数字、プラス記号、マイナス記号、ピリオド以外の文字を除去します。 |
| FILTER_SANITIZE_SPECIAL_CHARS | HTMLの特殊文字をエンコードします。 |
| FILTER_SANITIZE_ADD_SLASHES | 『addslashes()』と同等の処理を行います。PHP 8.1 で『FILTER_SANITIZE_STRING』の代替として追加されました。 |
サンプルコード
<?php
// メールアドレスのバリデーションです。
$email = "user@example.com";
if (filter_var($email, FILTER_VALIDATE_EMAIL) !== false) {
echo "有効なメールアドレスです。"; // 検証に通ります。
}
// 不正なメールアドレスの場合は false が返されます。
var_dump(filter_var("not-an-email", FILTER_VALIDATE_EMAIL)); // 『bool(false)』と出力されます。
// URLのバリデーションです。
$url = "https://wp-p.info";
if (filter_var($url, FILTER_VALIDATE_URL) !== false) {
echo "有効なURLです。";
}
// 整数値のバリデーションで範囲を指定します。
$age = "25";
$options = ['options' => ['min_range' => 0, 'max_range' => 150]];
$valid_age = filter_var($age, FILTER_VALIDATE_INT, $options);
if ($valid_age !== false) {
echo "年齢: " . $valid_age; // 『年齢: 25』と出力されます。
}
// IPアドレスのバリデーションです。
var_dump(filter_var("192.168.1.1", FILTER_VALIDATE_IP)); // 『string(11) "192.168.1.1"』と出力されます。
var_dump(filter_var("999.999.999.999", FILTER_VALIDATE_IP)); // 『bool(false)』と出力されます。
// filter_input() で $_GET の値を安全に取得します。
$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, [
'options' => ['min_range' => 1, 'default' => 1]
]);
// サニタイズの例です。
$dirty_email = "user