メインコンテンツにスキップ
モジュール 8 · レッスン 1 / 4コース内の 29/32~12 min
モジュールのレッスン (1/4)

電子メールの検証

電子メールを「正しく」検証することは、思っているよりも はるかに難しい問題です。 RFC 5322 はモンスターです。実際には、十分な パターンを選択します。 一般的なケースを受け入れ、明らかに間違っているケースを拒否します。

Code
Pattern: ^[\w.+-]+@[\w-]+(?:\.[\w-]+)+$
  • [\w.+-]+ -- ローカル部分: 文字、数字、_、.、+、-。
  • @ -- 区切り文字。
  • [\w-]+(?:\.[\w-]+)+ -- ドメイン + . で区切られた少なくとも 1 つの TLD。

受け入れられる内容: mario.rossi@example.com、foo+bar@sub.example.co.uk、 user_123@test-domain.io。

拒否するもの: mario@、@example.com、mario@example (TLD なし)、スペース。

トレードオフ

上記のパターンは次のものを受け入れません。

  • 引用符で囲まれた文字列 "strange (things)"@example.com (RFC では許可されています)。
  • Unicode 文字を含むドメイン (\u00fcber@m\u00fcnchen.de)。
  • \w を通過しない非常に長い TLD (国際化されたものなど)。

必要な場合は、u フラグを使用してクラスを \p{L} に拡張するか、 専門的な図書館。

電子メール検証のトレードオフとベスト プラクティス

正規表現では、電子メール アドレスが実際に存在することを保証できません。過度に複雑なパターンはパフォーマンスを低下させ、異常ではあるが有効なドメインを除外します。単純な検証パターンを使用して、明らかなタイプミスを拒否し、検証コードを送信することをお勧めします。

試してみてください

運動#regex.m8.l1.e1
試行回数: 0読み込み中…

テキスト内のすべてのメールを認識します。 @ の前に文字/数字/ドット、少なくとも 1 つのドットを含むドメインという単純なパターンを使用します。

エディターを読み込み中…
ヒントを表示

複数の TLD を受け入れるには、ローカル部分を [\\w.+-]+ に拡張し、ドメインを [\\w-]+\\.[\\w.-]+ に拡張します。

3 回の試行後に解決策が利用可能になります

復習演習

運動#regex.m8.l1.e2
試行回数: 0読み込み中…

すべての電子メールのドメイン (@ 以降の部分) を名前付きグループ `dominio` としてキャプチャします。

エディターを読み込み中…
ヒントを表示

ドメイン部分を名前付きグループでラップします: (?<dominio>[\\w.-]+)。

3 回の試行後に解決策が利用可能になります

追加の課題

運動#regex.m8.l1.e3
試行回数: 0読み込み中…

Find the domain part of an email (everything after `@`), excluding the `@` sign using lookbehind.

エディターを読み込み中…
ヒントを表示

ドメイン文字クラスの前に肯定的な後読み (?<=@) を使用します。

3 回の試行後に解決策が利用可能になります