PHPの正規表現でメールアドレスをチェックする方法を現役エンジニアが解説【初心者向け】

初心者向けにPHPの正規表現でメールアドレスをチェックする方法について現役エンジニアが解説しています。正規表現とは、文字列の集合を一つの文字列で表現する方法です。正規表現は、preg_match関数などの関数と組み合わせて判定します。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

今回は、PHPの正規表現でメールアドレスをチェックする方法について解説します。

 

なお本記事は、TechAcademyのPHP/Laravel講座の内容をもとに紹介しています。

 

田島悠介

今回は、PHPに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

PHPの正規表現でメールアドレスをチェックする方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

正規表現とは?

正規表現とは、文字列の集合を一つの文字列で表現する方法です。特定の文字列をパターンで表現することにより、文字列の集合(文章など)の中から、パターンに合った文字列を検索することができます。

正規表現の文字列のパターンは、通常の文字 (a ~ z など) と、「メタキャラクタ」という特殊文字から構成されます。メタキャラクタとは、文字列の特定のパターンにマッチする特殊な文字のことです。

例えば、”.”は任意の1文字 にマッチする、”+”は直前の文字が 1回以上 繰り返す場合にマッチする、などのパターンマッチのルールがあります。

メールアドレスを判定する正規表現

正規表現では、特定の文字列を入力する際に、フォーマットに沿っているかを確認するためによく用いられます。今回はメールアドレスについて判定する方法を説明します。

メールアドレスの正確な形式はRFC5322で定義されています。このメールアドレスの書式に完全に沿った正規表現を用いるのは困難です。ですので、ここでは簡易的に、下記の条件でメールアドレスの正規表現を構築します。

  • 使える文字はアルファベット大文字小文字 (a~z, A~Z) 、数字 (0~9)、記号 (. _ -)
  • 文字列の最初の文字は、記号以外
  • @を入れる
  • @の後の最初の文字は、(.)以外
  • @の前後で、それぞれ1文字以上の文字列が存在する

という条件にします。この条件での正規表現は下記のようになります。

/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/

 

[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

それでは、実際にメールアドレスを判定してみます。

PHPで正規表現を行うには、preg_match関数を用います。preg_match関数は、第一引数に正規表現を取り、第二引数に検証する文字列を取ります。

<?php
$a = "test@test.com";
$b = "testtest.com";  // @が入っていない
$c = ".test@test.com"; // 記号(.)から始まっている
$reg_str = "/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/";
if (preg_match($reg_str, $a)) {
 echo "正しいメールアドレスです"."\n";
} else {
 echo "正しくないメールアドレスです"."\n";
}
if (preg_match($reg_str, $b)) {
 echo "正しいメールアドレスです"."\n";
} else {
 echo "正しくないメールアドレスです"."\n";
}
if (preg_match($reg_str, $c)) {
 echo "正しいメールアドレスです"."\n";
} else {
 echo "正しくないメールアドレスです"."\n";
}
?>

実行結果は、下記のようになります。

正しいメールアドレスです。
正しくないメールアドレスです。
正しくないメールアドレスです。

このように、正規表現にマッチするか否かを判別することができます。

筆者プロフィール

メンターYさん

フリーランスエンジニアとして、PHPを中心としたWEB開発全般を行う。最近では、WordPressを使ったメディアの構築・運用を多くこなしている。

元々は大手通信会社のエンジニアで、セキュリティに関する仕事をするも、大企業が肌に合わず独立。一箇所に縛られての仕事を苦手とし、自宅とカフェとコワーキングスペースを行ったり来たりしている。

ただ、自宅にいるとどうしてもゲームをしてしまうため、コワーキングスペースの比率が大きい。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

オンラインのプログラミングスクールTechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。

PHPやフレームワークのLaravelを使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。