PHPでメールアドレスやURLをfilter_var()で判定

filter_var()は検証フィルタを利用して与えた変数を検証してくれる。テストコードを書きまくるが、検証したい値が多いのでまとめて実行したいんだが、var_dump()をそのまま出力すると見辛いのでこんな関数を用意していくのでブラックジャックによろしく

<?php
function get_var_dump($value) {
ob_start();
var_dump($value);
return ob_get_clean();
}

メールアドレスかを判定する

<?php
$list = [
'info@hatena.ne.jp',
'@hatena.ne.jp',
'hoge'
];
array_map(function($value) {
echo trim(get_var_dump($value));
echo ' => ';
echo trim(get_var_dump(filter_var($value, FILTER_VALIDATE_EMAIL)));
echo "\n";
}, $list);
$ php test.php
string(17) "info@hatena.ne.jp" => string(17) "info@hatena.ne.jp"
string(13) "@hatena.ne.jp" => bool(false)
string(4) "hoge" => bool(false)

trueっぽい奴にtrueを返す

<?php
$list = [true, false, 'on', 'true', 'yes', '1', 1, 0, null, 'null', 'ok'];
array_map(function($value) {
echo trim(get_var_dump($value));
echo ' => ';
echo trim(get_var_dump(filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)));
echo "\n";
}, $list);

falseっぽいやつにfalse返してるけど、よくわからなくなるとnullを返してるんかね

$ php test.php
bool(true) => bool(true)
bool(false) => bool(false)
string(2) "on" => bool(true)
string(4) "true" => bool(true)
string(3) "yes" => bool(true)
string(1) "1" => bool(true)
int(1) => bool(true)
int(0) => bool(false)
NULL => bool(false)
string(4) "null" => NULL
string(2) "ok" => NULL

整数化どうか

こっからはフィルターって感じの動きになるみたいよ

<?php
$list = [
10.5,
20,
true,
'a'
];
array_map(function($value) {
echo trim(get_var_dump($value));
echo ' => ';
echo trim(get_var_dump(filter_var($value, FILTER_VALIDATE_INT)));
echo "\n";
}, $list);

多分思想的にはifとかにそのまま突っ込んで動くからそのまま値返してるんじゃないかと思う。あと名称通り正常ならフィルターしてそのまま返すってことになるしな。

$ php test.php
float(10.5) => bool(false)
int(20) => int(20)
bool(true) => int(1)
string(1) "a" => bool(false)

floatかどうか

<?php
$list = [
10.5,
20,
true,
'a'
];
array_map(function($value) {
echo trim(get_var_dump($value));
echo ' => ';
echo trim(get_var_dump(filter_var($value, FILTER_VALIDATE_FLOAT)));
echo "\n";
}, $list);

floatだったらそのまま返して違えばfalseらしい

$ php test.php
float(10.5) => float(10.5)
int(20) => float(20)
bool(true) => float(1)
string(1) "a" => bool(false)

IPアドレスかどうか判定

<?php
$list = [
'127.0.0.1',
true,
'a'
];
array_map(function($value) {
echo trim(get_var_dump($value));
echo ' => ';
echo trim(get_var_dump(filter_var($value, FILTER_VALIDATE_IP)));
echo "\n";
}, $list);

IPアドレスなら文字列でそれを返す

$ php test.php
string(9) "127.0.0.1" => string(9) "127.0.0.1"
bool(true) => bool(false)
string(1) "a" => bool(false)

URLか判定する

<?php
$list = [
'http://example.com',
'example.com'
];
array_map(function($value) {
echo trim(get_var_dump($value));
echo ' => ';
echo trim(get_var_dump(filter_var($value, FILTER_VALIDATE_URL)));
echo "\n";
}, $list);

URLなら文字列で違うならfalse

$ php test.php
string(18) "http://example.com" => string(18) "http://example.com"
string(11) "example.com" => bool(false)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA