PHPのfilter_var関数でメールアドレスかどうかチェックする方法!

フォームで入力された文字列がメールアドレスかどうかを判定する必要になることがあります。PHPでは文字列がメールアドレスかどうかを判定する方法にはいくつかありますが、この記事ではfilter_var関数を使って判定を行う方法をサンプルコード付きで解説しています。

コンテンツ [表示]

  1. 1PHPのfilter_var関数でメールアドレスかどうかチェックしたい
  2. 2PHPのfilter_var関数でメールアドレスかどうかチェックする方法
  3. 3まとめ

PHPのfilter_var関数でメールアドレスかどうかチェックしたい

顧客情報をDBに登録する際のフォームやお問い合わせフォームで入力される機会の多いメールアドレスですが、間違った形式のものが登録されないようにバリデーションを行うのが一般的です。

メールアドレスのバリデーションを行う方法はいくつかありますが、PHPではfilter_var関数を使うことで比較的短いコードで簡単にバリデーションを行うことができます。

今回はPHPのfilter_var関数を使ってメールアドレスかどうかを判定する方法をサンプルコード付きで紹介していきます。

あわせて読みたい
filter_var関数
PHPのfilter_var関数の概要や使い方をサンプルコード付きで紹介しています。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関数の方がカスタマイズしやすいので良いかと思います。

状況に応じて、どちらの関数も使い分けてみてくださいね。

GeekHive採用サイト

関連記事