はじめに
この実験では、正規表現を使用して Java で与えられた文字列が標準的なメール形式に一致するかどうかを検証する方法を学びます。適切な正規表現パターンを定義し、検証に Pattern.matches() メソッドを利用し、さまざまな有効および無効なメールアドレスで実装をテストして、正しく機能することを確認します。この実践的な演習を通じて、文字列パターンマッチングに関する Java の正規表現機能を実際に体験することができます。
メールの正規表現パターンを定義する
このステップでは、メールアドレスの検証に使用する正規表現パターンを定義します。正規表現は、しばしば "regex" または "regexp" と略され、検索パターンを定義する文字のシーケンスです。文字列のパターンマッチングと操作に非常に強力です。
メールの検証では、正規表現パターンを使用して、与えられた文字列が標準的なメールアドレス形式(例:username@domain.com)に従っているかどうかを確認します。すべての可能な有効なメールアドレスに対応する完璧な正規表現は非常に複雑ですが、ほとんどの一般的で有効な形式をカバーするパターンを定義することができます。
コードを格納する新しい Java ファイルを作成します。
- WebIDE が開いていない場合は開きます。デフォルトでは
~/projectディレクトリにいるはずです。 - 左側のファイルエクスプローラーで、空白部分を右クリックして「新しいファイル」を選択します。ファイル名を
EmailValidator.javaとします。 - ファイルエクスプローラーで
EmailValidator.javaファイルをクリックしてエディターで開きます。 - ここで、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}:トップレベルドメイン(例:com、org、国コード)の 2 から 7 文字のアルファベット文字に一致します。$:文字列の末尾に一致します。
正規表現パターンが複雑に見えても心配しないでください。複雑な正規表現パターンのすべての詳細を理解するには時間と練習が必要です。現時点では、この文字列が有効なメールアドレスのルールを定義していることに焦点を当ててください。
EmailValidator.javaファイルを保存します(Ctrl+S または Cmd+S)。
これで、Java ファイルを正常に作成し、メール検証用の正規表現パターンを定義しました。次のステップでは、このパターンを使用して実際のメールアドレスを検証します。
Pattern.matches() を使用したメール検証
このステップでは、Java の Pattern.matches() メソッドを使用して、与えられた文字列が定義したメールの正規表現パターンに一致するかどうかを確認する方法を学びます。Pattern.matches(regex, input) メソッドは、入力文字列全体を正規表現と簡単にマッチさせる便利な方法です。入力文字列全体が正規表現に一致する場合は true を返し、そうでない場合は false を返します。
この検証を行うために、EmailValidator クラスに新しいメソッドを追加します。
- WebIDE のエディターで
EmailValidator.javaファイルが開いていない場合は開きます。 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メソッドによって返されます。
- ここで、新しい
isValidEmailメソッドを使用するようにmainメソッドを変更しましょう。既存のmainメソッドを次のコードに置き換えます。
public static void main(String[] args) {
String testEmail = "test.email@example.com";
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 = "test.email@example.com";:テストするサンプルのメールアドレスを定義します。boolean isValid = isValidEmail(testEmail);:testEmailを使用してisValidEmailメソッドを呼び出し、返されたブール値をisValid変数に格納します。ifとelseブロックはisValidの値をチェックし、メールが有効かどうかを示すメッセージを出力します。
EmailValidator.javaファイルを保存します(Ctrl+S または Cmd+S)。- ここで、更新されたプログラムをコンパイルしましょう。WebIDE の下部にあるターミナルを開き、
~/projectディレクトリにいることを確認します。次のコマンドを実行します。
javac EmailValidator.java
エラーがなければ、コンパイルは成功しました。
- 最後に、
javaコマンドを使用してコンパイルされたプログラムを実行します。
java EmailValidator
正規表現パターンに基づいて、テストメールが有効かどうかを示す出力が表示されるはずです。
test.email@example.com is a valid email address.
これで、定義した正規表現パターンを使用して Pattern.matches() メソッドを使ってメールアドレスを検証することに成功しました。次のステップでは、さまざまな有効および無効なメールアドレスでテストします。
有効と無効なメールアドレスでテストする
この最後のステップでは、有効と無効なメールアドレスのいくつかの例を使って EmailValidator をテストし、正規表現パターンと Pattern.matches() メソッドがそれらをどのように扱うかを確認します。これにより、検証ロジックの動作を理解するのに役立ちます。
- WebIDE のエディターで
EmailValidator.javaファイルを開きます。 mainメソッドを変更して、複数のメールアドレスをテストするようにします。現在のmainメソッドを次のコードに置き換えます。
public static void main(String[] args) {
String[] testEmails = {
"test.email@example.com", // Valid
"another_test+alias@sub.domain.co.uk", // Valid
"invalid-email", // Invalid (missing @)
"invalid@domain", // Invalid (missing top-level domain)
"invalid@domain.", // Invalid (missing top-level domain)
"invalid@domain.c", // Invalid (top-level domain too short)
"invalid@domain.abcdefgh", // Invalid (top-level domain too long)
"@domain.com", // Invalid (missing username)
"test@.com" // 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メソッドを呼び出し、前のステップと同じように結果を出力します。
EmailValidator.javaファイルを保存します(Ctrl+S または Cmd+S)。- ターミナルで修正したプログラムをコンパイルします。
javac EmailValidator.java
コンパイルエラーがないことを確認します。
- コンパイルしたプログラムを実行します。
java EmailValidator
出力を確認します。testEmails 配列内の各メールアドレスについて、正規表現パターンに基づいて検証器がそれを有効と見なすかどうかを示す行が表示されるはずです。
test.email@example.com is a valid email address.
another_test+alias@sub.domain.co.uk 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.
invalid@domain.c is not a valid email address.
invalid@domain.abcdefgh is not a valid email address.
@domain.com is not a valid email address.
test@.com is not a valid email address.
さまざまな入力でテストすることで、正規表現パターンと Pattern.matches() メソッドがどのように連携してメールアドレスを検証するかがわかります。この正規表現は多くの一般的なケースをカバーしていますが、厳格な標準に従ってすべての可能なメール形式を検証することははるかに複雑になることを覚えておいてください。
これで、Java の正規表現機能を使って基本的なメール検証メカニズムを実装し、テストすることに成功しました。
まとめ
この実験では、まず Java 環境をセットアップし、新しいファイル EmailValidator.java を作成しました。次に、メールアドレスの検証用に特別に設計された正規表現パターン (EMAIL_REGEX) を定義しました。このパターンは定数文字列として保存され、Java の java.util.regex.Pattern クラスを利用して強力な文字列マッチング機能を実現します。この最初のステップは、後続のステップでメール検証ロジックを実装するための基礎を築きます。



