【PHPプログラミング】filter_var検証フィルタ(VALIDATE)でメルアドや数値、真偽値をフィルタリングしてみる
| 更新: 2024/02/22 | 2893文字
今回はPHPのファンクションfilter_var・検証フィルタで、『メルアドや数値、真偽値をフィルタリング』というのを行ってみます。 管理人はfilter_input(フィルター型は共通)を以前使っていましたが、マニュアルや書籍を調査して、いろんなフィルターがあるのを知ったので、挙動を確認してみます。
目次
PHP・filter_varとは?
フィルタ型を指定して、変数・文字列などをフィルタリングする機能です。配列(array)にまとめてかけるときは、似た名前の『filter_var_array』を使用します。 書き方的には『値,フィルター型,オプション』を指定します。
フィルタの型には大きく分けて
・検証(条件にあうかチェック,FILTER_VALIDATE_〇〇)
・除去(条件にあわないものを取り除く,FILTER_SANITIZE_〇〇)
・コールバック(コールバック関数でフィルタ,FILTER_CALLBACK)
というのがあるようです。
filter_var(PHPマニュアル)
https://www.php.net/manual/ja/function.filter-var.php
filter_var_array(PHPマニュアル)
https://www.php.net/manual/ja/function.filter-var-array.php
フィルタの型(PHPマニュアル)
https://www.php.net/manual/ja/filter.filters.php
今回使ってみる検証フィルタ(FILTER_VALIDATE_〇〇)
先述のフィルタ種類ですが、今回は検証(FILTER_VALIDATE_〇〇)を使ってみます。このフィルタの挙動としては『条件にあった場合は通過したデータを返す・通過しない場合はbool値でfalseを返す』となっています。
ここでは、web制作とかで使う頻度が高そうなもの(ケースによっては全部使うけど)を3つほどピックアップしました。
マニュアルに目を通しましたが、どうやら内部型キャストも入っているみたいですね。
FILTER_VALIDATE_EMAIL | Eメール形式判定。e-mailアドレスがRFC822のaddr-spec 形式 に沿ったものであるかどうかチェックする。 |
---|---|
FILTER_VALIDATE_INT | 整数であるかどうか判定。符号付・負の整数もサポートしている様子。オプションで数値の範囲なども指定できる。 |
FILTER_VALIDATE_BOOL | 真偽値判定。bool値のtrue/falseのほか、文字列形式の『1、true、on、yes』などもtrue判定できる。 |
filter_var検証フィルタ(VALIDATE)でメルアドや数値、真偽値チェック
メールアドレスの場合(FILTER_VALIDATE_EMAIL)
まずはメルアドを検証してみましょう。形式的に正しいものと、そうでないものを用意。構文は以下のような書き方になります。
$mail = 'info@example.com';
$mail_result = filter_var($mail, FILTER_VALIDATE_EMAIL);
var_dump($mail_result);
?>
通過したデータはそのままreturn、通過しない場合はfalseに。
数値の場合(FILTER_VALIDATE_INT)
こんな感じで、マイナス付・文字列形式の数字・浮動小数点・文字列形式の文字列など入れて、配列に。配列にフィルタリング掛ける場合は、『filter_var_array』を使います。構文は先ほどと、ほぼ同様(出力時は改行のためpreコード入れています)
$intarr = array(1,346,2785,-25,'245',0.2345,'abcd');
$intarr_result = filter_var_array($intarr, FILTER_VALIDATE_INT);
var_dump($intarr_result);
?>
結果はこのような感じに。負の整数もサポートしているみたいで、『-25』は通りました。文字列形式の数字も型変換して(intに)通ります。浮動小数点と文字列はハネてくれましたね。浮動小数点通したい場合は、『FILTER_VALIDATE_FLOAT』を使うという手もあります。
真偽値判定の場合(FILTER_VALIDATE_BOOL)
次は真偽値を判定していきます。これはtrue/falseが返ります。あからさまにtrueになりそうな『数値1,bool値true,文字列1,文字列true』のほか、数字や文字列、文字列のfalseや、nullも入れてみます。
$boolarr = array(1,true,'1','true',345,0.2345,'abcd','false',null);
$boolarr_result = filter_var_array($boolarr, FILTER_VALIDATE_BOOL);
var_dump($boolarr_result);
?>
結果はこんな感じに。ちなみに、マニュアルに『onやyesもtrueになる』とありましたけど、引用符でかこんで文字列形式で入れる必要があります。(Undefined constantエラーになる)
あとがき・まとめ
- filter_var検証フィルタでは、フラグ(FILTER_VALIDATE_BOOLみたいなの)を指定することにより、いろんなタイプの検証ができる
- 配列もフィルターをかけることができ、その場合はfilter_var_arrayを使う
- 文字列形式の数値がint(245)のように戻り、内部では型変換を行っている
まとめると、こんなところでしょうか。そのうち時間があったらサニタイズ(除去フィルター)や、$_GETなどのフィルタリング(filter_input)もまとめてみたいところです。
【カテゴリ】- PHP
【タグ】- filter(PHP)