はじめに
この実験では、正規表現を使用して Java で与えられた文字列が標準的なメール形式に一致するかどうかを検証する方法を学びます。適切な正規表現パターンを定義し、検証に Pattern.matches()
メソッドを利用し、さまざまな有効および無効なメールアドレスで実装をテストして、正しく機能することを確認します。この実践的な演習を通じて、文字列パターンマッチングに関する Java の正規表現機能を実際に体験することができます。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、正規表現を使用して Java で与えられた文字列が標準的なメール形式に一致するかどうかを検証する方法を学びます。適切な正規表現パターンを定義し、検証に Pattern.matches()
メソッドを利用し、さまざまな有効および無効なメールアドレスで実装をテストして、正しく機能することを確認します。この実践的な演習を通じて、文字列パターンマッチングに関する Java の正規表現機能を実際に体験することができます。
このステップでは、メールアドレスの検証に使用する正規表現パターンを定義します。正規表現は、しばしば "regex" または "regexp" と略され、検索パターンを定義する文字のシーケンスです。文字列のパターンマッチングと操作に非常に強力です。
メールの検証では、正規表現パターンを使用して、与えられた文字列が標準的なメールアドレス形式(例:[email protected]
)に従っているかどうかを確認します。すべての可能な有効なメールアドレスに対応する完璧な正規表現は非常に複雑ですが、ほとんどの一般的で有効な形式をカバーするパターンを定義することができます。
コードを格納する新しい Java ファイルを作成します。
~/project
ディレクトリにいるはずです。EmailValidator.java
とします。EmailValidator.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 ファイルを正常に作成し、メール検証用の正規表現パターンを定義しました。次のステップでは、このパターンを使用して実際のメールアドレスを検証します。
このステップでは、Java の Pattern.matches()
メソッドを使用して、与えられた文字列が定義したメールの正規表現パターンに一致するかどうかを確認する方法を学びます。Pattern.matches(regex, input)
メソッドは、入力文字列全体を正規表現と簡単にマッチさせる便利な方法です。入力文字列全体が正規表現に一致する場合は true
を返し、そうでない場合は false
を返します。
この検証を行うために、EmailValidator
クラスに新しいメソッドを追加します。
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 = "[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
変数に格納します。if
と else
ブロックは isValid
の値をチェックし、メールが有効かどうかを示すメッセージを出力します。EmailValidator.java
ファイルを保存します(Ctrl+S または Cmd+S)。~/project
ディレクトリにいることを確認します。次のコマンドを実行します。javac EmailValidator.java
エラーがなければ、コンパイルは成功しました。
java
コマンドを使用してコンパイルされたプログラムを実行します。java EmailValidator
正規表現パターンに基づいて、テストメールが有効かどうかを示す出力が表示されるはずです。
[email protected] is a valid email address.
これで、定義した正規表現パターンを使用して Pattern.matches()
メソッドを使ってメールアドレスを検証することに成功しました。次のステップでは、さまざまな有効および無効なメールアドレスでテストします。
この最後のステップでは、有効と無効なメールアドレスのいくつかの例を使って EmailValidator
をテストし、正規表現パターンと Pattern.matches()
メソッドがそれらをどのように扱うかを確認します。これにより、検証ロジックの動作を理解するのに役立ちます。
EmailValidator.java
ファイルを開きます。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
メソッドを呼び出し、前のステップと同じように結果を出力します。EmailValidator.java
ファイルを保存します(Ctrl+S または Cmd+S)。javac EmailValidator.java
コンパイルエラーがないことを確認します。
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
クラスを利用して強力な文字列マッチング機能を実現します。この最初のステップは、後続のステップでメール検証ロジックを実装するための基礎を築きます。