icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【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_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)

まずはメルアドを検証してみましょう。形式的に正しいものと、そうでないものを用意。構文は以下のような書き方になります。

<?php
$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コード入れています)

<?php
$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も入れてみます。

<?php
$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
【タグ】-

関連記事