Java で文字列がメール形式に一致するかどうかを確認する方法

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、正規表現を使用して Java で与えられた文字列が標準的なメール形式に一致するかどうかを検証する方法を学びます。適切な正規表現パターンを定義し、検証に Pattern.matches() メソッドを利用し、さまざまな有効および無効なメールアドレスで実装をテストして、正しく機能することを確認します。この実践的な演習を通じて、文字列パターンマッチングに関する Java の正規表現機能を実際に体験することができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/BasicSyntaxGroup -.-> java/for_loop("For Loop") java/StringManipulationGroup -.-> java/strings("Strings") java/StringManipulationGroup -.-> java/regex("RegEx") java/SystemandDataProcessingGroup -.-> java/string_methods("String Methods") subgraph Lab Skills java/if_else -.-> lab-559994{{"Java で文字列がメール形式に一致するかどうかを確認する方法"}} java/for_loop -.-> lab-559994{{"Java で文字列がメール形式に一致するかどうかを確認する方法"}} java/strings -.-> lab-559994{{"Java で文字列がメール形式に一致するかどうかを確認する方法"}} java/regex -.-> lab-559994{{"Java で文字列がメール形式に一致するかどうかを確認する方法"}} java/string_methods -.-> lab-559994{{"Java で文字列がメール形式に一致するかどうかを確認する方法"}} end

メールの正規表現パターンを定義する

このステップでは、メールアドレスの検証に使用する正規表現パターンを定義します。正規表現は、しばしば "regex" または "regexp" と略され、検索パターンを定義する文字のシーケンスです。文字列のパターンマッチングと操作に非常に強力です。

メールの検証では、正規表現パターンを使用して、与えられた文字列が標準的なメールアドレス形式(例:[email protected])に従っているかどうかを確認します。すべての可能な有効なメールアドレスに対応する完璧な正規表現は非常に複雑ですが、ほとんどの一般的で有効な形式をカバーするパターンを定義することができます。

コードを格納する新しい Java ファイルを作成します。

  1. WebIDE が開いていない場合は開きます。デフォルトでは ~/project ディレクトリにいるはずです。
  2. 左側のファイルエクスプローラーで、空白部分を右クリックして「新しいファイル」を選択します。ファイル名を EmailValidator.java とします。
  3. ファイルエクスプローラーで EmailValidator.java ファイルをクリックしてエディターで開きます。
  4. ここで、Java クラスの基本構造を追加し、正規表現パターンを定義しましょう。次のコードを EmailValidator.java ファイルにコピーして貼り付けます。
import java.util.regex.Pattern;

public class EmailValidator {

    // Email regex pattern
    private static final String EMAIL_REGEX =
            "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";

    public static void main(String[] args) {
        // We will add code here in the next steps
    }
}

新しい部分を簡単に見てみましょう。

  • import java.util.regex.Pattern;:この行は、Java の組み込みの正規表現サポートの一部である Pattern クラスをインポートします。
  • private static final String EMAIL_REGEX = "...";:この行は、EMAIL_REGEX という名前の定数変数を宣言し、正規表現パターンを割り当てます。
    • ^:文字列の先頭に一致します。
    • [a-zA-Z0-9_+&*-]+:1 つ以上の英数字または _+&*- に一致します。これはユーザー名部分です。
    • (?:\\.[a-zA-Z0-9_+&*-]+)*:ドットに続くユーザー名文字が 0 回以上出現する場合に一致します。これにより、ユーザー名にドットを含めることができます(例:first.last)。
    • @:リテラルの "@" 記号に一致します。
    • (?:[a-zA-Z0-9-]+\\.)+:英数字または - に続くドットが 1 回以上出現する場合に一致します。これはドメイン名(例:domain.)です。
    • [a-zA-Z]{2,7}:トップレベルドメイン(例:comorg、国コード)の 2 から 7 文字のアルファベット文字に一致します。
    • $:文字列の末尾に一致します。

正規表現パターンが複雑に見えても心配しないでください。複雑な正規表現パターンのすべての詳細を理解するには時間と練習が必要です。現時点では、この文字列が有効なメールアドレスのルールを定義していることに焦点を当ててください。

  1. EmailValidator.java ファイルを保存します(Ctrl+S または Cmd+S)。

これで、Java ファイルを正常に作成し、メール検証用の正規表現パターンを定義しました。次のステップでは、このパターンを使用して実際のメールアドレスを検証します。

Pattern.matches() を使用したメール検証

このステップでは、Java の Pattern.matches() メソッドを使用して、与えられた文字列が定義したメールの正規表現パターンに一致するかどうかを確認する方法を学びます。Pattern.matches(regex, input) メソッドは、入力文字列全体を正規表現と簡単にマッチさせる便利な方法です。入力文字列全体が正規表現に一致する場合は true を返し、そうでない場合は false を返します。

この検証を行うために、EmailValidator クラスに新しいメソッドを追加します。

  1. WebIDE のエディターで EmailValidator.java ファイルが開いていない場合は開きます。
  2. EmailValidator クラス内で、main メソッドの外に次のメソッドを追加します。
public static boolean isValidEmail(String email) {
    return Pattern.matches(EMAIL_REGEX, email);
}

この新しいメソッドを見てみましょう。

  • public static boolean isValidEmail(String email)isValidEmail という名前の新しいメソッドを宣言します。
    • public:このメソッドはクラスの外部からアクセスできることを意味します。
    • static:このメソッドは EmailValidator クラス自体に属し、クラスの特定のオブジェクトに属しません。クラス名を使用して直接呼び出すことができます(例:EmailValidator.isValidEmail(...))。
    • boolean:このメソッドはブール値(true または false)を返すことを示します。
    • (String email):このメソッドは 1 つの引数を取り、email という名前の String で、検証したいメールアドレスです。
  • return Pattern.matches(EMAIL_REGEX, email);:これがメソッドの核心です。Pattern.matches() メソッドを呼び出し、EMAIL_REGEX と入力 email 文字列を渡します。このマッチの結果(true または false)は、isValidEmail メソッドによって返されます。
  1. ここで、新しい isValidEmail メソッドを使用するように main メソッドを変更しましょう。既存の main メソッドを次のコードに置き換えます。
public static void main(String[] args) {
    String testEmail = "[email protected]";
    boolean isValid = isValidEmail(testEmail);

    if (isValid) {
        System.out.println(testEmail + " is a valid email address.");
    } else {
        System.out.println(testEmail + " is not a valid email address.");
    }
}

この更新された main メソッドでは、

  • String testEmail = "[email protected]";:テストするサンプルのメールアドレスを定義します。
  • boolean isValid = isValidEmail(testEmail);testEmail を使用して isValidEmail メソッドを呼び出し、返されたブール値を isValid 変数に格納します。
  • ifelse ブロックは isValid の値をチェックし、メールが有効かどうかを示すメッセージを出力します。
  1. EmailValidator.java ファイルを保存します(Ctrl+S または Cmd+S)。
  2. ここで、更新されたプログラムをコンパイルしましょう。WebIDE の下部にあるターミナルを開き、~/project ディレクトリにいることを確認します。次のコマンドを実行します。
javac EmailValidator.java

エラーがなければ、コンパイルは成功しました。

  1. 最後に、java コマンドを使用してコンパイルされたプログラムを実行します。
java EmailValidator

正規表現パターンに基づいて、テストメールが有効かどうかを示す出力が表示されるはずです。

[email protected] is a valid email address.

これで、定義した正規表現パターンを使用して Pattern.matches() メソッドを使ってメールアドレスを検証することに成功しました。次のステップでは、さまざまな有効および無効なメールアドレスでテストします。

有効と無効なメールアドレスでテストする

この最後のステップでは、有効と無効なメールアドレスのいくつかの例を使って EmailValidator をテストし、正規表現パターンと Pattern.matches() メソッドがそれらをどのように扱うかを確認します。これにより、検証ロジックの動作を理解するのに役立ちます。

  1. WebIDE のエディターで EmailValidator.java ファイルを開きます。
  2. main メソッドを変更して、複数のメールアドレスをテストするようにします。現在の main メソッドを次のコードに置き換えます。
public static void main(String[] args) {
    String[] testEmails = {
        "[email protected]",       // Valid
        "[email protected]", // Valid
        "invalid-email",                // Invalid (missing @)
        "invalid@domain",               // Invalid (missing top-level domain)
        "invalid@domain.",              // Invalid (missing top-level domain)
        "[email protected]",             // Invalid (top-level domain too short)
        "[email protected]",      // Invalid (top-level domain too long)
        "@domain.com",                  // Invalid (missing username)
        "[email protected]"                     // Invalid (missing domain name)
    };

    for (String email : testEmails) {
        boolean isValid = isValidEmail(email);

        if (isValid) {
            System.out.println(email + " is a valid email address.");
        } else {
            System.out.println(email + " is not a valid email address.");
        }
    }
}

この更新された main メソッドでは、

  • 有効なものと意図的に無効なものを含むさまざまなメールアドレスが入った testEmails という文字列の配列を作成します。
  • for ループを使って testEmails 配列内の各メールアドレスを繰り返し処理します。
  • ループ内で、各 email に対して isValidEmail メソッドを呼び出し、前のステップと同じように結果を出力します。
  1. EmailValidator.java ファイルを保存します(Ctrl+S または Cmd+S)。
  2. ターミナルで修正したプログラムをコンパイルします。
javac EmailValidator.java

コンパイルエラーがないことを確認します。

  1. コンパイルしたプログラムを実行します。
java EmailValidator

出力を確認します。testEmails 配列内の各メールアドレスについて、正規表現パターンに基づいて検証器がそれを有効と見なすかどうかを示す行が表示されるはずです。

[email protected] is a valid email address.
[email protected] is a valid email address.
invalid-email is not a valid email address.
invalid@domain is not a valid email address.
invalid@domain. is not a valid email address.
[email protected] is not a valid email address.
[email protected] is not a valid email address.
@domain.com is not a valid email address.
[email protected] is not a valid email address.

さまざまな入力でテストすることで、正規表現パターンと Pattern.matches() メソッドがどのように連携してメールアドレスを検証するかがわかります。この正規表現は多くの一般的なケースをカバーしていますが、厳格な標準に従ってすべての可能なメール形式を検証することははるかに複雑になることを覚えておいてください。

これで、Java の正規表現機能を使って基本的なメール検証メカニズムを実装し、テストすることに成功しました。

まとめ

この実験では、まず Java 環境をセットアップし、新しいファイル EmailValidator.java を作成しました。次に、メールアドレスの検証用に特別に設計された正規表現パターン (EMAIL_REGEX) を定義しました。このパターンは定数文字列として保存され、Java の java.util.regex.Pattern クラスを利用して強力な文字列マッチング機能を実現します。この最初のステップは、後続のステップでメール検証ロジックを実装するための基礎を築きます。