検証フィルタ

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

FILTER_VALIDATE_BOOL (int)

"1", 2進数、8進数、16進数記法の 1, 科学的記法を含む 1.0, "true", true, "on", "yes" に対して、true を返します。

"0", 2進数、8進数、16進数記法の 0, 科学的記法を含む 0.0, "false", false, "off", "no", "" に対して、false を返します。

文字列の値は、大文字小文字の区別をせず比較されます。 このフィルタが boolean 以外を返すかどうかは、 FILTER_NULL_ON_FAILURE の値次第です。 この値が設定されていると、null を返します。 そうでない場合、false を返します。

利用可能なオプション
default

フィルタが失敗した場合に返す値

PHP 8.0.0 以降で利用可能です。

FILTER_VALIDATE_BOOLEAN (int)

のエイリアス FILTER_VALIDATE_BOOL。 このエイリアスは、正規化された名前が実装される前の PHP 8.0.0 より前のバージョンで利用可能でした。

FILTER_VALIDATE_INT (int)

値が整数値かどうかを検証します。 検証が成功すると、int 型に変換されます。

注意:

文字列の値は、検証する前に trim() を実行します。

利用可能なオプション
default

フィルタが失敗した場合に返す値

min_range

指定した値と等しい、 またはそれより大きな場合にのみ値が正しいとみなされます。

max_range

指定した値と等しい、 またはそれより小さな場合にのみ値が正しいとみなされます。

オプションのフラグ
FILTER_FLAG_ALLOW_OCTAL (int)

8 進表記 (0[0-7]+) を許可します。

FILTER_FLAG_ALLOW_HEX (int)

16 進表記 (0x[0-9a-fA-F]+) を許可します。

FILTER_VALIDATE_FLOAT (int)

値が浮動小数点数かどうかを検証します。 検証が成功すると、float 型に変換されます。

注意:

文字列の値は、検証する前に trim() を実行します。

利用可能なオプション
default

フィルタが失敗した場合に返す値

decimal

min_range

指定した値と等しい、 またはそれより大きな場合にのみ値が正しいとみなされます。 PHP 7.4.0 以降で利用可能です。

max_range

指定した値と等しい、 またはそれより小さな場合にのみ値が正しいとみなされます。 PHP 7.4.0 以降で利用可能です。

オプションのフラグ
FILTER_FLAG_ALLOW_THOUSAND (int)

桁区切り文字 (,) を許可します。 これは通常、1000ごとに桁を区切るのに使われます。

FILTER_VALIDATE_REGEXP (int)

regexp オプションによって、 指定した正規表現にマッチするかを検証します。

利用可能なオプション
default

フィルタが失敗した場合に返す値

regexp

PCRE 互換の正規表現

FILTER_VALIDATE_URL (int)

URL が » RFC 2396 に照らして正しいかを検証します。

利用可能なオプション
default

フィルタが失敗した場合に返す値

オプションのフラグ
FILTER_FLAG_SCHEME_REQUIRED (int)

URL に scheme 部分を必須とします。

警告

PHP 7.3.0 以降は非推奨になり、 PHP 8.0.0 で削除されました。 FILTER_VALIDATE_URL フィルタが常にこの処理を含んでいたからです。

FILTER_FLAG_HOST_REQUIRED (int)

URL に host 部分を必須とします。

警告

PHP 7.3.0 以降は非推奨になり、 PHP 8.0.0 で削除されました。 ほとんどのスキームでは、FILTER_VALIDATE_URL フィルタが常にこの処理を含んでいたからです。

FILTER_FLAG_PATH_REQUIRED (int)

URL に path 部分を必須とします。

FILTER_FLAG_QUERY_REQUIRED (int)

URL に query 部分を必須とします。

警告

正しい URL であっても、 HTTP プロトコル (http://) を指定しない場合があります。 よって、URL が期待通りのプロトコルを使っているかについては、 追加の検証が必要です。 たとえば ssh:// や mailto: の検証がその例です。

警告

このフィルタは ASCII で構成された URL に対してのみ動作します。 つまり、Internationalized Domain Names (IDN) は常に拒否されるということです。

警告

このフィルタの検証は非常に緩やかです。 http:// と https:// 以外のスキームでは、ホスト部の内容は一切検証されずに受け入れられます。 ただし、URL のスキームが mailto:、news:、file: のいずれかである場合を除き、ホスト部は必須です。 スキーム自体も検証されず、既知の URL スキームに該当しないものや、 PHP では別の意味を持つもの (phar:// など) でも受け入れられることがあります。 また、このフィルタは自ホストを指す» ループバックアドレスも受け入れます。

<?php

var_dump(filter_var('javascript://x%0aalert(1)', FILTER_VALIDATE_URL));
var_dump(filter_var('javascript://?demo', FILTER_VALIDATE_URL));
var_dump(filter_var('news:?demo', FILTER_VALIDATE_URL));
var_dump(filter_var('phar://demo', FILTER_VALIDATE_URL));
var_dump(filter_var('123://demo', FILTER_VALIDATE_URL));
var_dump(filter_var('-://demo', FILTER_VALIDATE_URL));
var_dump(filter_var('http://127.0.0.1', FILTER_VALIDATE_URL));
var_dump(filter_var('gopher://127.0.0.1', FILTER_VALIDATE_URL));
?>

上の例の出力は以下となります。

string(25) "javascript://x%0aalert(1)"
bool(false)
string(10) "news:?demo"
string(11) "phar://demo"
string(10) "123://demo"
string(8) "-://demo"
string(16) "http://127.0.0.1"
string(18) "gopher://127.0.0.1"
FILTER_VALIDATE_DOMAIN (int)

ドメイン名が » RFC 952, » RFC 1034, » RFC 1035, » RFC 1123, » RFC 2732, » RFC 2181 に照らして正しいかを検証します。

利用可能なオプション
default

フィルタが失敗した場合に返す値

オプションのフラグ
FILTER_FLAG_HOSTNAME (int)

アルファベットと数字から始まり、 アルファベットと数字およびハイフンだけを含むホスト名を必須とします。

警告

このフィルタの検証は非常に緩やかです。 » RFC 2181 の規定では、 正しいドメイン名とは、長さが最大 253 文字 (末尾の区切り文字 . を含めると 254 文字) で、 . で区切られた各ラベルが 63 文字以下の文字列のことです。 ドメイン名がホスト名としても正しいかを FILTER_FLAG_HOSTNAME で検証しない限り、 このフィルタは空白文字、メタ文字、制御文字、 さらには NUL バイトまで受け入れます。

<?php

var_dump(filter_var("!@#$%^&*(){}[]/?=+\|`~\"'<>,", FILTER_VALIDATE_DOMAIN));
var_dump(filter_var("null byte: >\0<", FILTER_VALIDATE_DOMAIN));
var_dump(filter_var("space:> <, tab:>\t<, newline: >\n<, carriage return>\r<", FILTER_VALIDATE_DOMAIN));
?>

上の例の出力は以下となります。

string(27) "!@#$%^&*(){}[]/?=+\|`~"'<>,"
string(14) "null byte: ><"
string(52) "space:> <, tab:>	<, newline: >
<, carriage return>
<"
FILTER_VALIDATE_EMAIL (int)

値が "正しい" メールアドレスかどうかを検証します。

» RFC 822 の addr-spec 構文に照らして検証は行われます。 しかし、コメントやホワイトスペースのフォールディング、 ドットなしのドメイン名はサポートされていません。 よってこれらは拒否されます。

利用可能なオプション
default

フィルタが失敗した場合に返す値

オプションのフラグ
FILTER_FLAG_EMAIL_UNICODE (int)

local の部分に Unicode を許可します。 PHP 7.1.0 以降で利用可能です。

警告

メールアドレスの検証は複雑なので、 メールアドレスが正しく、かつ存在するかを確認する唯一の方法は、 そのアドレスにメールを送信することです。

FILTER_VALIDATE_IP (int)

値が IPアドレス かどうかを検証します。

利用可能なオプション
default

フィルタが失敗した場合に返す値

オプションのフラグ
FILTER_FLAG_IPV4 (int)

IPv4 アドレスを許可します。

FILTER_FLAG_IPV6 (int)

IPv6 アドレスを許可します。

FILTER_FLAG_NO_RES_RANGE (int)

予約済みアドレスを拒否します。

» RFC 6890 で Reserved-By-Protocol としてマークされているアドレスが該当します。

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_NO_PRIV_RANGE (int)

プライベートアドレスを拒否します。

IPv4 については、以下の範囲が該当します: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16.

IPv6 については、 FD や FC から始まるものが該当します。

FILTER_FLAG_GLOBAL_RANGE (int)

グローバルアドレスのみを許可します。 » RFC 6890 で、 Global 属性が True になっているものが該当します。 PHP 8.2.0 以降で利用可能です。

FILTER_VALIDATE_MAC (int)

値が MACアドレス かどうかを検証します。

利用可能なオプション
default

フィルタが失敗した場合に返す値