0
0

PHPのfilter_var関数で検証を行う

Posted at

はじめに

最近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

  • 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)

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0