【Java初心者向け】メールアドレスの正規表現の書き方まとめ

  • このエントリーをはてなブックマークに追加
  • Pocket
メールアドレスの正規表現

メールアドレスは正規表現でよくチェックするもののひとつだろう。

JavaやPHPなどを含めたプログラミングごとの正規表現の書き方と、実際のサンプルプログラムを用意してみた。参考にしていただければと思う。

正規表現によるメールアドレスの扱い方

正規表現を使うと、メールアドレスのチェックをしたり、テキストの中からメールアドレスを抽出したりすることができる。

メールアドレス

最初に、対象となるメールアドレスはどのような仕様に基づいているかを確認しておこう。

メールアドレスに関して最新の仕様と言えそうなものが、RFC 5322 (Internet Message Format)の「3.4.1.  Addr-Spec Specification」に定義されている。厳密にこの仕様を正規表現で実現したいのであれば、最新の仕様をじっくり読んで理解したうえで独自に正規表現を定義してください。また、@の前に「.」を許すような仕様は今回含んでいません。

ここでは、RFC 5322仕様の中の「dot-atom」に記載された仕様に従ってメールアドレスの形式を説明している。

RFC 5322に規定されているメールアドレスの形式は次の通りです。「@」を挟んでlocal-partとdomainの二つの部分に分かれている。

基本形式 local-part @ domain

使える文字

「domain」も、「local-part」で使用可能な文字とは、以下の文字である。

「local-part」は、一文字以上の使用可能文字である。さらに、「.」に続けて一文字以上の使用可能文字をセットとして複数追加することができる。しかし、「.」だけを最後の文字として追加することはできない。

「domain」も、「local-part」と同じ規則が適用される。

正規表現

では、このメールアドレスの仕様に基づいた正規表現はどうなるか見てみよう。メールアドレスの正規表現は以下のようになる。とりあえずJavaのバージョンだ。

この正規表現は、複雑なのでどのような構造になっているかを説明しておく。

aTextが使用可能な文字の正規表現である。そのaTextによってドッドを含む文字列の正規表現dotAtomを作る。dotAtomの先頭は一文字以上のaTextである。最終的にメールアドレスの正規表現はdotAtomによって定義される構造になっている。

よくわからなければ、はじめはコピーアンドペーストで使っていただいて構わない。また、もっと簡単な制限をかけたり、もっとしっかりと制限をかけたりということもできる。

メールアドレスで使える文字も少しずつ変わっていっているので、ある程度適切な緩めの表現を使うのがいいだろう。

各プログラミング言語における正規表現表記

この比較表は、Java以外のプログラミング言語で東京の固定メールアドレスの正規表現を扱うとどうなるかを示している。

言語

正規表現

Java

Ruby

(Javaとほぼ同じだが、「/」を「\/」とする必要がある。)

PHP

(Javaと同じだが、「/」で挟まれている。また、「/」を「\/」とする必要がある。)

C/C++

(Javaとほぼ同じだが、「\w」を「[:w:]」に置き換える必要がある。)

メールアドレスをチェックするサンプルプログラム

それでは、実際にサンプルプログラムを確認してみよう。

このJavaのサンプルプログラムでは、メールアドレスが形式に合致しているかどうか正規表現を使ってチェックしている。メールアドレス「abc.def@efg.com」については、アドレスが正しい場合だけでなく、誤った場合に不正なアドレスとして検出されることも確認している。

実行結果

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] メソッドcheckRightMailAddresses(正しいメールアドレスのチェック)を呼び出す。
  • [2] メソッドcheckWrongMailAddresses(誤ったメールアドレスのチェック)を呼び出す。
  • [3] メソッドcheckRightMailAddressesを定義する。
  • [4] 「正しいメールアドレス」を表示する。
  • [5]-[7] 以下のメールアドレスをメソッドcheckMailAddressByRegularExpressionの引数として渡し、チェックする
  • [9] メソッドcheckMailAddressesを定義する。
  • [10] 「誤ったメールアドレス」を表示する。
  • [20] メソッドcheckMailAddressByRegularExpressionを定義する。
  • [21] 変数resultを定義する。
  • [22] aTextに使用可能な文字の正規表現を代入する。
  • [23] aTextによってドッドを含む文字列の正規表現を作り、dotAtomに代入する。
  • [24] dotAtomによってメールアドレスの正規表現を作り、メールアドレスの正規表現に代入する。
  • [22]-[26] メソッドcheckMailAddressを呼び出し、メールアドレスaddressを正規表現でチェックする。
  • [27] 「不正なメールアドレス:」に引数の「メールアドレス」を加えて表示する。
  • [40] メソッドcheckMailAddressを定義する。
  • [41] 指定された正規表現を持つPatternのインスタンスpatternを生成する。
  • [42] メールアドレスaddressを引数に指定してpatternからmatcherを取得する。
  • [43][44][45] メールアドレスが正規表現に一致していれば、メールアドレスを表示し、trueを戻す。
  • [46] falseを戻す。

まとめ

このページではメールアドレスの正規表現についてまとめてみた。

よく使うものだが、覚える必要はない。使いたくなったら、閲覧に来ていただければと思う。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できる。

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

SNSでもご購読できます。

コメントを残す

*