ホーム > PHP関数リファレンス > フィルタ系 > php filter_var データをフィルタリングして値をチェックする
UPDATE:2019年12月11日

php filter_var データをフィルタリングして値をチェックする

php filter_var データをフィルタリングして値をチェックする | wepicks!
PHP4 PHP5 PHP7


php filter_var データをフィルタリングして値をチェックする

php filter_var() 書式
mixed フィルタリングしたデータ = filter_var(mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options ]]);
フィルタリングに失敗した場合 FALSE を返す
[ ]省略可

説明指定したデータをフィルタリングする。フィルタリングとは見込んでいるデータかどうかチェックすることです。
引数mixed 必須 $variableフィルタリングする値を指定します。値をフィルタリングする前に、内部的に文字列への変換が行われることに注意。
引数int $filter適用するフィルタの種類をIDで指定します。検証用フィルタ除去用フィルタを参照下さい。
省略した場合、FILTER_DEFAULT が適応されます。これは FILTER_UNSAFE_RAW と同等の意味になります。結果的に、デフォルトでは何もフィルタリングをしません。
引数mixed $optionsオプションあるいはフラグの論理和の連想配列。オプションを指定可能なフィルタの場合、この配列の flags フィールドにフラグを指定します。
返り値mixed 値 | FALSEフィルタリングに成功した場合は指定されたデータの値を返します。失敗した場合に FALSE を返します。

サンプル

◆ 引数 や 返り値 のデータ型の説明

データ型 引数 や 返り値 のデータ型の説明
引数 や 返り値内容(引数 | 返り値)
string文字列型 を受け入れる。 | 文字列型 を返す。
int整数型 を受け入れる。 | 整数型 を返す。
float浮動小数点数型 を受け入れる。 | 浮動小数点数型 を返す。
bool論理型 を受け入れる。 | 論理型 を返す。
number整数型 または 浮動小数点数型 を受け入れる。 | 整数型 または 浮動小数点数型 を返す。
array配列型 を受け入れる。 | 配列型 を返す。
objectオブジェクト型 を受け入れる。 | オブジェクト型 を返す。
array|object配列型 または オブジェクト型 を受け入れる。 | 配列型 または オブジェクト型 を返す。
mixed複数の データ型 を受け入れる(パラメーター)、或いは、返す(返り値)ことが可能。全てのデータ型ではありません。例えば gettype()関数 は全ての型を受け入れますが、一方、str_replace()関数 は、文字列型 と 配列型 のみを受け入れます。また、reset()関数 や end()関数 は、返り値に 配列型 と 論理型(FALSE)を返します。
voidパラメータ一覧で void が使用されている場合、その関数がパラメータを受け付けないことを表します。 | 返り値の型が void である場合、返り値に意味がないことを表します。
callbackcallback 疑似型がこのドキュメントで使われていたのは、PHP 5.4 で callable タイプヒントが導入される前のことでした。両者はまったく同じ意味です。

◆ php filter_var() 内容

データをフィルタリングする

指定したデータをフィルタリングします。フィルタリングとは、対象の変数が存在するか、想定しているデータ型か、格納している値は想定している内容か、など、データのチェックを行うことです。入力チェックやバリデーションなどとも言います。

パラメーター int $filter = FILTER_DEFAULT で、どのようなフィルタリングを行うか指定します。例えば、 FILTER_VALIDATE_EMAIL は、メールアドレスが妥当な内容かどうか調べることが出来ます。検証フィルタや除去フィルタなど、さまざまな種類のフィルタが用意されています。以下の表で一部を紹介しているので、参照下さい。このパラメーターを省略した場合は FILTER_DEFAULT が適応されます。これは FILTER_UNSAFE_RAW が指定されるのと同一で何もフィルタリングされません。

フィルタリングはプログラミングにおいて非常に重要な要素です。変数の内容は、それが想定されている情報である必要があり、それが、想定外の情報を格納している場合にそのまま処理してしまうと、バグや脆弱性につながります。例えば、メールアドレス情報を扱う GET や POST などの変数に、悪意のあるSQL文を入力され、それをフィルタリングせずに処理した場合、データベースへのハッキングにつながる可能性があります。SQLインジェクションなどと呼ばれます。

フィルタリングはソフトの安定性や安全性にとって重要な処理です。

メールアドレスをチェックしてみる

正しいメールアドレスの場合、返り値はデータの値となります。

実行結果
string(16) "info@wepicks.net"
正しいメールアドレスです。info@wepicks.net

値がメールアドレスでない場合や空の場合、返り値は FALSE となります。

実行結果
bool(false)
誤ったメールアドレスです。

mixed $options を利用してデータをチェックする

オプションで数値範囲を 0 ~ 9 で指定します。

実行結果
int(0)
正しい数値です。0

10の場合

実行結果
bool(false)
誤った数値です。

となります。

オプションはフィルタの種類によって異なります。フィルタのオプションを参照下さい。検証用フィルタ除去用フィルタフィルタフラグ

◆ php filter_var() パラメーター

内容
必須 mixed $variableフィルタリングする値を指定します。値をフィルタリングする前に、 内部的に文字列への変換が行われることに注意しましょう。
int $filter適用するフィルタの種類をIDで指定します。検証用フィルタ除去用フィルタを参照下さい。
省略した場合、FILTER_DEFAULT が適応されます。これは FILTER_UNSAFE_RAW と同等の意味になります。結果的に、デフォルトでは何もフィルタリングをしません。
mixed $optionsオプションあるいはフラグの論理和の連想配列です。オプションが指定可能なフィルタの場合、この配列の flags フィールドにフラグを指定します。

◆ php filter_var() 返り値

mixed
フィルタリングに成功した場合は指定されたデータの値を返します。失敗した場合に FALSE を返します。

mixed 複数の データ型 を受け入れる(パラメーター)、或いは、返す(返り値)ことが可能。全てのデータ型ではありません。例えば gettype()関数 は全ての型を受け入れますが、一方、str_replace()関数 は、文字列型 と 配列型 のみを受け入れます。また、reset()関数 や end()関数 は、返り値に 配列型 と 論理型(FALSE)を返します。

◆ php filter_var() 変更履歴

PHPバージョン変更内容

検証用フィルタ一覧

ID名前オプションフラグ説明
FILTER_VALIDATE_BOOLEAN'boolean' default FILTER_NULL_ON_FAILURE

'1'、'true'、'on' および 'yes' の場合に TRUE、 それ以外の場合に FALSE を返します。

FILTER_NULL_ON_FAILURE が設定されている場合は、 FALSE が返されるのは '0'、'false'、'off'、'no' および '' の場合のみとなります。 boolean 以外の値については NULL を返します。

FILTER_VALIDATE_EMAIL'validate_email' default FILTER_FLAG_EMAIL_UNICODE

値が妥当な e-mail アドレスであるかどうかを検証します。

この検証は、e-mail アドレスが RFC 822 に沿った形式であるかどうかを確かめます。 ただし、コメント、空白の折り返し (whitespace folding) および ドットなしドメイン名 (dotless domain name) には対応していません。

FILTER_VALIDATE_FLOAT'float' default, decimal FILTER_FLAG_ALLOW_THOUSAND値が float であるかどうかを検証し、成功した場合は値を float に変換します。
FILTER_VALIDATE_INT'int' default, min_range, max_range FILTER_FLAG_ALLOW_OCTAL, FILTER_FLAG_ALLOW_HEX値が整数であるかどうか、オプションで指定した範囲内にあるかどうかを検証し、成功した場合は整数に変換します。
FILTER_VALIDATE_IP'validate_ip' default FILTER_FLAG_IPV4, FILTER_FLAG_IPV6, FILTER_FLAG_NO_PRIV_RANGE, FILTER_FLAG_NO_RES_RANGE 値が IP アドレスであるかどうかを検証します。 オプションで IPv4 あるいは IPv6 のみの指定、 プライベートアドレスや予約済みアドレスではないことの指定もできます。
FILTER_VALIDATE_MAC'validate_mac_address' default 値が MAC アドレスであるかどうかを検証します。
FILTER_VALIDATE_REGEXP'validate_regexp' default, regexp  値が、Perl 互換の正規表現 regexp に一致するかどうかを検証します。
FILTER_VALIDATE_URL'validate_url' default FILTER_FLAG_SCHEME_REQUIRED, FILTER_FLAG_HOST_REQUIRED, FILTER_FLAG_PATH_REQUIRED, FILTER_FLAG_QUERY_REQUIRED 値が URL 形式である (» こちら に準拠している) かどうか、 オプションで、必須コンポーネントが含まれているかどうかを検証します。 妥当な URL が、HTTP プロトコル http:// を指定しているとは限りません。 つまり、その URL が期待通りのプロトコル (ssh://mailto: など) を使っているかどうか、さらなる検証が必要だということです。 この関数は、ASCII の URL のみを正しいとみなすことに注意しましょう。 国際化ドメイン名 (非 ASCII 文字を含むもの) は失敗します。

除去用フィルタ一覧

ID名前フラグ説明
FILTER_SANITIZE_EMAIL'email'  英字、数字および !#$%&'*+-=?^_`{|}~@.[] 以外のすべての文字を取り除きます。
FILTER_SANITIZE_ENCODED'encoded' FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_STRIP_BACKTICK, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH 文字列を URL エンコードします。オプションで、 特殊文字を取り除いたりエンコードしたりします。
FILTER_SANITIZE_MAGIC_QUOTES'magic_quotes' addslashes() を適用します。
FILTER_SANITIZE_NUMBER_FLOAT'number_float' FILTER_FLAG_ALLOW_FRACTION, FILTER_FLAG_ALLOW_THOUSAND, FILTER_FLAG_ALLOW_SCIENTIFIC 数字、+- および オプションで .,eE 以外のすべての文字を取り除きます。
FILTER_SANITIZE_NUMBER_INT'number_int'  数字、プラス記号、マイナス記号 以外のすべての文字を取り除きます。
FILTER_SANITIZE_SPECIAL_CHARS'special_chars' FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_STRIP_BACKTICK, FILTER_FLAG_ENCODE_HIGH ''<>& および ASCII 値が 32 未満の文字を HTML エスケープします。オプションで、 特殊文字を取り除いたりエンコードしたりします。
FILTER_SANITIZE_FULL_SPECIAL_CHARS'full_special_chars' FILTER_FLAG_NO_ENCODE_QUOTES, htmlspecialchars()ENT_QUOTES を指定してコールするのと同じです。 クォートのエンコードを無効にするには FILTER_FLAG_NO_ENCODE_QUOTES を設定します。 htmlspecialchars() と同様、このフィルタは default_charset に対応しています。 現在の文字セットで無効な文字となるバイトシーケンスが検出されると文字列全体を拒否し、 結果は長さ 0 の文字列となります。 このフィルタをデフォルトのフィルタとして使う場合は、以下の警告を参考にして デフォルトのフラグを 0 に設定しましょう。
FILTER_SANITIZE_STRING'string' FILTER_FLAG_NO_ENCODE_QUOTES, FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_STRIP_BACKTICK, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH, FILTER_FLAG_ENCODE_AMP タグを取り除きます。オプションで、 特殊文字を取り除いたりエンコードしたりします。
FILTER_SANITIZE_STRIPPED'stripped' 'string' フィルタのエイリアス。
FILTER_SANITIZE_URL'url'  英字、数字および $-_.+!*'(),{}|\\^~[]`<>#%';/?:@&= 以外のすべての文字を取り除きます。
FILTER_UNSAFE_RAW'unsafe_raw' FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_STRIP_BACKTICK, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH, FILTER_FLAG_ENCODE_AMP 何もせず、オプションで特殊文字を取り除いたりエンコードしたりします。 FILTER_DEFAULT は、このフィルタのエイリアスです。

フィルタフラグ

ID使える場所説明
FILTER_FLAG_STRIP_LOW FILTER_SANITIZE_ENCODED, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_SANITIZE_STRING, FILTER_UNSAFE_RAW コードが 32 未満の文字を除去します。
FILTER_FLAG_STRIP_HIGH FILTER_SANITIZE_ENCODED, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_SANITIZE_STRING, FILTER_UNSAFE_RAW コードが 127 より大きい文字を除去します。
FILTER_FLAG_STRIP_BACKTICK FILTER_SANITIZE_ENCODED, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_SANITIZE_STRING, FILTER_UNSAFE_RAW バックティック文字を除去します。
FILTER_FLAG_ALLOW_FRACTION FILTER_SANITIZE_NUMBER_FLOAT ピリオド (.) を数値の小数点として許可します。
FILTER_FLAG_ALLOW_THOUSAND FILTER_SANITIZE_NUMBER_FLOAT, FILTER_VALIDATE_FLOAT カンマ (,) を数値の桁区切り文字として許可します。
FILTER_FLAG_ALLOW_SCIENTIFIC FILTER_SANITIZE_NUMBER_FLOAT e あるいは E を、 科学記法の数値として許可します。
FILTER_FLAG_NO_ENCODE_QUOTES FILTER_SANITIZE_STRING このフラグを指定すると、シングルクォート (') およびダブルクォート (") をエンコードしません。
FILTER_FLAG_ENCODE_LOW FILTER_SANITIZE_ENCODED, FILTER_SANITIZE_STRING, FILTER_SANITIZE_RAW コードが 32 未満のすべての文字をエンコードします。
FILTER_FLAG_ENCODE_HIGH FILTER_SANITIZE_ENCODED, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_SANITIZE_STRING, FILTER_SANITIZE_RAW コードが 127 より大きいすべての文字をエンコードします。
FILTER_FLAG_ENCODE_AMP FILTER_SANITIZE_STRING, FILTER_SANITIZE_RAW アンパサンド (&) をエンコードします。
FILTER_NULL_ON_FAILURE FILTER_VALIDATE_BOOLEAN boolean 値として認識できない値の場合に NULL を返します。
FILTER_FLAG_ALLOW_OCTAL FILTER_VALIDATE_INT ゼロ (0) で始まる入力を八進数とみなします。 ゼロの後には 0-7 しか続けることができません。
FILTER_FLAG_ALLOW_HEX FILTER_VALIDATE_INT 0x あるいは 0X で始まる入力を十六進数とみなします。 後に続けられる文字は a-fA-F0-9 だけです。
FILTER_FLAG_EMAIL_UNICODE FILTER_VALIDATE_EMAIL Allows the local part of the email address to contain Unicode characters.
FILTER_FLAG_IPV4 FILTER_VALIDATE_IP IPv4 形式の IP アドレスを許可します。
FILTER_FLAG_IPV6 FILTER_VALIDATE_IP IPv6 形式の IP アドレスを許可します。
FILTER_FLAG_NO_PRIV_RANGE FILTER_VALIDATE_IP

IPv4 プライベート領域 10.0.0.0/8, 172.16.0.0/12 および 192.168.0.0/16 を許可しません。

FD あるいは FC ではじまる IPv6 アドレスを許可しません。

FILTER_FLAG_NO_RES_RANGE FILTER_VALIDATE_IP

予約済みの IPv4 範囲 0.0.0.0/8, 169.254.0.0/16, 127.0.0.0/8 および 240.0.0.0/4 を許可しません。

予約済みの IPv6 範囲 ::1/128::/128::ffff:0:0/96 および fe80::/10 を許可しません。

FILTER_FLAG_SCHEME_REQUIRED FILTER_VALIDATE_URL URL がスキームを含むことを要求します。
FILTER_FLAG_HOST_REQUIRED FILTER_VALIDATE_URL URL がホストを含むことを要求します。
FILTER_FLAG_PATH_REQUIRED FILTER_VALIDATE_URL URL で、パス部分を必須とします。
FILTER_FLAG_QUERY_REQUIRED FILTER_VALIDATE_URL URL で、クエリ文字列を必須とします。
FILTER_REQUIRE_SCALAR 値がスカラーであることを必須とします。
FILTER_REQUIRE_ARRAY 値が配列であることを必須とします。
FILTER_FORCE_ARRAY 値がスカラーである場合は、スカラー値をひとつだけ持つ配列として扱います。

php filter_var() サンプル

実行結果
string(16) "info@wepicks.net"

実行結果
bool(false)


タグ(=記事関連ワード)

タグ: , ,

日付

投稿日:2019年7月20日
最終更新日:2019年12月11日

このカテゴリの他のページ

この記事へのコメント

トラックバックurl

https://wepicks.net/phpfunction-filter-filter_var/trackback/

page top