PHPのfilter_var関数でメールアドレスかどうかチェックする方法!
フォームで入力された文字列がメールアドレスかどうかを判定する必要になることがあります。PHPでは文字列がメールアドレスかどうかを判定する方法にはいくつかありますが、この記事ではfilter_var関数を使って判定を行う方法をサンプルコード付きで解説しています。
PHPのfilter_var関数でメールアドレスかどうかチェックしたい
顧客情報をDBに登録する際のフォームやお問い合わせフォームで入力される機会の多いメールアドレスですが、間違った形式のものが登録されないようにバリデーションを行うのが一般的です。
メールアドレスのバリデーションを行う方法はいくつかありますが、PHPではfilter_var
関数を使うことで比較的短いコードで簡単にバリデーションを行うことができます。
今回はPHPのfilter_var
関数を使ってメールアドレスかどうかを判定する方法をサンプルコード付きで紹介していきます。
PHPのfilter_var関数でメールアドレスかどうかチェックする方法
早速サンプルコードを使って解説していきます。
まずは正規表現を用いてpreg_match
関数を使ってメールアドレスかどうかをチェックする方法を紹介したいと思います。
<?php
// 正規表現で判定
$email = "hoge@test.ne.jp";
$pattern = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/iD";
if(preg_match($pattern, $email)){
echo $email . "はメールアドレスです。";
}else{
echo $email . "はメールアドレスではありません。";
}
preg_match
関数を使った場合、正規表現の部分が少々複雑で正規表現の知識が少ないと正しくバリデーションを行うのが難しいでしょう。
次にfilter_var
関数を使ったメールアドレスをチェックする方法を紹介します。
<?php
// filter_varで判定
$email = "hoge@test.ne.jp";
if(filter_var($email, FILTER_VALIDATE_EMAIL)){
echo $email . "はメールアドレスです。";
}else{
echo $email . "はメールアドレスではありません。";
}
preg_match
関数を使った場合は第二引数にメールアドレスを指定しましたが、filter_var
関数を使った場合は第一引数にメールアドレスを指定する点に注意してください。
第二引数にはフィルタの型と呼ばれるものの1つであるFILTER_VALIDATE_EMAIL
を指定します。
filter_var
関数を使った場合はたったこれだけでメールアドレスのチェックを行うことができます。preg_match
関数で使った難しい正規表現を使うことはありません。
メールアドレスの判定に成功した場合はフィルタリングされたデータを返し、失敗した場合はfalse
を返します。
まとめ
filter_var
関数を使ったメールアドレスの検証方法の方が簡単で便利だと紹介しましたが、FILTER_VALIDATE_EMAIL
というフィルタはRFC822という形式に沿ったメールアドレスかどうかを判定しています。
ただ、RFC822に準拠しないメールアドレスの場合は、メールアドレスと判定されず弾かれてしまうので柔軟に対応したい場合は正規表現を用いたpreg_match
関数の方がカスタマイズしやすいので良いかと思います。
状況に応じて、どちらの関数も使い分けてみてくださいね。