未入力(空欄)にも対応したメールアドレス検証用のJava正規表現プログラム
フォームの入力チェックなどでは、「メールアドレス欄が任意入力(空欄でもよい)」というケースによく遭遇します。そんなときに役立つのが、空欄の入力も有効として扱えるメールアドレス検証用の正規表現です。本記事では、未入力(空文字)の場合も許容しつつ、通常のメールアドレスの形式を正しく判定できる正規表現と、それをJavaで実装する2つのサンプルコードをわかりやすく解説します。
使用する正規表現は次のとおりです。
^([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6})?$正規表現の各要素の意味
^:文字列の先頭にマッチすることを示します。[a-zA-Z0-9._%+-]:@記号の前に置ける1文字を表し、英字(大文字・小文字)、数字、および「+」「_」「.」「%」「-」のいずれかにマッチします。+:直前の文字セットが1回以上繰り返されることを意味します。@:アットマークそのものにマッチします。[a-zA-Z0-9.-]:@記号の後に置ける1文字を表し、英字(大文字・小文字)、数字、「.」「-」のいずれかにマッチします。\.[a-zA-Z]{2,6}:「.」の後に続く、2〜6文字のアルファベットで構成されるドメイン部分(TLD)にマッチします。$:文字列の末尾を示します。(...)?:括弧内のパターン全体を省略可能(0回または1回)にしています。この「?」があるため、空文字(未入力)でもマッチします。
例1:ScannerとPattern・Matcherクラスを使った検証
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SampleTest {
public static void main(String args[]) {
String regex = "^([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6})?$";
// ユーザーからの入力を受け取る
Scanner sc = new Scanner(System.in);
System.out.println("名前を入力してください: ");
String name = sc.nextLine();
System.out.println("メールアドレスを入力してください: ");
String e_mail = sc.nextLine();
System.out.println("年齢を入力してください: ");
int age = sc.nextInt();
// Patternクラスのインスタンスを生成
Pattern pattern = Pattern.compile(regex);
// Matcherクラスのインスタンスを生成
Matcher matcher = pattern.matcher(e_mail);
// マッチしたかどうかを判定
if (matcher.find()) {
System.out.println("メールアドレスは有効です");
} else {
System.out.println("メールアドレスは無効です");
}
}
}実行結果1(メールアドレス未入力)
名前を入力してください: krishna メールアドレスを入力してください: (何も入力せずにEnterキーを押下) 年齢を入力してください: 20 メールアドレスは有効です
実行結果2(通常のメールアドレス)
名前を入力してください: Rajeev メールアドレスを入力してください: rajeev.123@gmail.com 年齢を入力してください: 25 メールアドレスは有効です
例2:String.matches()メソッドを使ったシンプルな検証
import java.util.Scanner;
public class Example {
public static void main(String args[]) {
// ユーザーから文字列を受け取る
System.out.println("メールアドレスを入力してください: ");
Scanner sc = new Scanner(System.in);
String e_mail = sc.nextLine();
// 正規表現パターン
String regex = "^([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6})?$";
boolean result = e_mail.matches(regex);
if (result) {
System.out.println("有効なメールアドレス形式です");
} else {
System.out.println("無効なメールアドレス形式です");
}
}
}実行結果1(通常のメールアドレス)
メールアドレスを入力してください: rajeev.123@gmail.com 有効なメールアドレス形式です
実行結果2(未入力)
メールアドレスを入力してください: (何も入力せずにEnterキーを押下) 有効なメールアドレス形式です
補足:実装時の注意点
このパターンでは空欄が「有効」と判定されます。メールアドレスを必須項目にしたい場合は、末尾の「?」を取り除き、
^([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6})$のように変更してください。{2,6}はトップレベルドメイン(TLD)を2〜6文字に制限しています。「.technology」など最近増えている長いgTLDまで許可したい場合は、{2}などに調整を検討しましょう。より厳密なRFC準拠の検証が必要な場合は、
jakarta.mailのInternetAddressクラスなどを利用する方法もあります。
-
Javaの正規表現\Dメタ文字とは?数字以外にマッチさせる方法を解説
Javaの正規表現におけるサブ表現(メタ文字)「\D」は、数字以外の文字(非数字)にマッチします。 「\D」は、数字1文字にマッチする「\d」と対になるメタ文字です。文字クラスで表すと「[^0-9]」と同等であり、英字・記号・空白など、0〜9以外のあらゆる文字にマッチします。 \Dに関連する主なメタ文字一覧 メタ文字意味 \d数字1文字([0-9]と同等) \D数字以外の1文字([^0-9]と同等) \s空白文字(スペース・タブ・改行など) \S空白以外の1文字 \w単語構成文字([a-zA-Z_0-9]と同等) \W単語構成文字以外の1文字 例1:\Dにマッチする文字数を数える
-
Pythonの正規表現を使ってメールアドレスを検証する方法
Pythonでは、標準ライブラリの re モジュールを使った正規表現によって、与えられたメールアドレス(メールID)が正しい形式かどうかを簡単に検証できます。以下のコードは、任意のメールアドレスを正規表現でチェックする基本的な例です。サンプルコードimport re s = manogna.neelam@tutorialspoint.com match = re.search(r\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2}\b, s, re.I) print(match.group())実行結果このコードを実行すると、次のような出力が得られます。manogna