はじめに
最近ChatGPTでPHPコードを生成した際Filterの存在を知った。
スクラッチ開発でメールアドレスなどの検証を行うのに正規表現を利用していたが標準機能が存在するなら利用しようと思いまとめてみた。
今回はfilter_var関数を使った検証フィルタをいくつかまとめた。他にもさまざまなFilterの機能が存在する。詳しくはPHPマニュアルを確認して欲しい。
※対応バージョンはPHP 5 >= 5.2.0, PHP 7, PHP 8
※一部機能は対応していないバージョンがあるのでマニュアルを確認すること
Boolean
- "1"、"true"、"on" および "yes"の時trueを返す
フィルタの型 | |
---|---|
FILTER_VALIDATE_BOOLEAN | FILTER_VALIDATE_BOOL |
検証例
- POST送信された値が真(1, true, on, yes)とみなせる値か検証する
index.php
if (isset($_POST['test']) && filter_var($_POST['test'] ,FILTER_VALIDATE_BOOLEAN)) {
//何らかの処理
}
- FILTER_NULL_ON_FAILUREフラグを追加することでfalseを返すのは"0"、"false"、"off"、"no"のみになる。真とfalse以外の値はnullを返す
index.php
//NULLを返す
$failure_value = 'test';
var_dump(filter_var($failure_value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)); //NULL
//falseを返す
$falsy_value = 'no';
var_dump(filter_var($falsy_value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)); //bool(false)
その他
- 文字列を検証する際、先頭および末尾にあるホワイトスペースはtrim関数で除去される
URL
- 値が URL 形式である (» http://www.faqs.org/rfcs/rfc2396 に準拠している) かどうかを検証する
- ASCIIのURLのみ正しいとみなす
- プロトコルの検証は別途行う必要がある
フィルタの型 |
---|
FILTER_VALIDATE_URL |
検証例
index.php
//RFC2396に準拠したURL
$compliant_url = 'https://www.google.com/';
var_dump(filter_var($compliant_url, FILTER_VALIDATE_URL)); //string(23) "https://www.google.com/"
//RFC2396に準拠していないURL
$not_compliant_url = 'http://example.com/あいうえお';
var_dump(filter_var($not_compliant_url, FILTER_VALIDATE_URL)); //bool(false)
//ただのパス
$path = '/test/0124/';
var_dump(filter_var($path, FILTER_VALIDATE_URL)); //bool(false)
その他
- ここでは詳しく説明しないがフラグを設定することでパスやクエリを必須にできる
- e-mail アドレスが » RFC 822 の addr-spec 形式 に沿ったものであるかどうかを確かめる
フィルタの型 |
---|
FILTER_VALIDATE_EMAIL |
検証例
index.php
//RFC822に準拠したe-mail アドレス
$compliant_email = 'test@example.com';
var_dump(filter_var($compliant_email, FILTER_VALIDATE_EMAIL)); //string(16) "test@example.com"
//RFC822に準拠していないe-mail アドレス
$not_compliant_email = 'john@doe@example.com';
var_dump(filter_var($not_compliant_email, FILTER_VALIDATE_EMAIL)); //bool(false)