JavaScript の正規表現を使用して電子メールを検証する

Habdul Hazeez 2023年10月12日
  1. 2 ~ 3 文字の TLD 間のメールをチェックし、メール内の文字と JavaScript のドメイン名を許可しない
  2. 2つから 6つの TLD 名の間の電子メールをチェックし、JavaScript で電子メール名のプラス記号を許可しない
  3. 電子メールを確認し、電子メールで数字と有効な文字を許可し、JavaScript でドメイン名を許可する
  4. JavaScript で RFC 5322 形式の電子メール アドレスを確認する
  5. まとめ
JavaScript の正規表現を使用して電子メールを検証する

この記事では、さまざまな種類のメール アドレスを検証できる複数の正規表現について説明します。 したがって、ユースケースに最適なパターンの 1つを変更または選択できます。

2 ~ 3 文字の TLD 間のメールをチェックし、メール内の文字と JavaScript のドメイン名を許可しない

2つから 3つの TLD の間の電子メール アドレスを許可する正規表現を作成できます。 たとえば、.com.io などです。

これは、パターンが次の特性を持つ電子メールを許可しないことも意味します。

  1. 3 文字を超える TLD、たとえば .mobi
  2. 複数の TLD。 (.gmail.sa)
  3. 数字を含むドメイン、例: tech125.com
  4. メール名のピリオド (.) またはハイフン (-)
  5. ドメイン名のハイフン

以下のコード例では、abc@gmail.comhello@hello.comab0c@gmail.com などの電子メール アドレスに対して true を返す正規表現があります。

let pattern = /^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/;

function checkEmailAddress(email_address) {
  let result = pattern.test(email_address);
  console.log(result);
}

checkEmailAddress('abc@gmail.com')

出力:

true

一方、パターンは次の電子メール アドレスに対して false を返します。

ab0c@my-domain.com

2つから 6つの TLD 名の間の電子メールをチェックし、JavaScript で電子メール名のプラス記号を許可しない

正規表現パターンでは、電子メール アドレスで完全な停止記号 (.) を許可し、プラス記号 (+) を禁止することができます。 これは、プラス記号が付いた電子メール アドレスが正規表現を通過しないことを意味します。

そのため、有効であっても false を返します。 このセクションで定義するパターンは、次の特性を持つ電子メールに対して false を返します。

  1. プラス記号 (+) が付いたメール
  2. 6 文字を超える TLD。 ("。テクノロジー")

次のコードには、新しい正規表現があります。 一方、このパターンは、前のセクションの最後のメールに対して true を返します。

let pattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;

function checkEmailAddress(email_address) {
  let result = pattern.test(email_address);
  console.log(result);
}

checkEmailAddress('ab0c@my-domain.com')

出力:

true

一方、以下にリストされている電子メール アドレスは、このパターンを通過しません。 ただし、一部の電子メール プロバイダーではすべて有効です。

ab+c@my-domain.com
mr+john@my-domain.com.ga

電子メールを確認し、電子メールで数字と有効な文字を許可し、JavaScript でドメイン名を許可する

現在存在する有効なメール アドレスのほとんどを許可する柔軟な正規表現パターンを作成できます。 このような電子メールには、次のような特徴があります。

  1. 電子メールと TLD 名にピリオドとサインインのような一部の文字。
  2. .technology.business などの新しい TLD。

このパターンの欠点は、これらの文字を複数許可することです。 その結果、ユーザーは有効に見える非常に長い電子メール アドレスを渡すことができますが、そうではありません。

let pattern =
    /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

function checkEmailAddress(email_address) {
  let result = pattern.test(email_address);
  console.log(result);
}

checkEmailAddress('johndoe@citadel-consulting.com');

出力:

true

ただし、次の無効な電子メール アドレスはこのパターンを通過します。

aaa++++++++++@gmail.technologyyyyyyyyyyyyyyyyyyyyyyyyyyy.com

JavaScript で RFC 5322 形式の電子メール アドレスを確認する

RFC 5322 形式に準拠した正規表現パターンを記述できます。 ただし、このような正規表現は長くなります。

結果、わからなくなることがあります。 そのため、JavaScript の RegExp クラスで簡略版を使用できます。

次のコードでは、RFC 5322 に準拠した正規表現パターンを実装しています。したがって、最も有効な電子メール アドレスに対して true を返します。

let pattern = new RegExp(
    '([!#-\'*+/-9=?A-Z^-~-]+(\.[!#-\'*+/-9=?A-Z^-~-]+)*|"\(\[\]!#-[^-~ \t]|(\\[\t -~]))+")@([!#-\'*+/-9=?A-Z^-~-]+(\.[!#-\'*+/-9=?A-Z^-~-]+)*|\[[\t -Z^-~]*])');

function checkEmailAddress(email_address) {
  let result = pattern.test(email_address);
  console.log(result);
}

checkEmailAddress('aa@gmail.com.sa');

出力:

true

まとめ

この記事では、メール アドレスを検証するさまざまな正規表現パターンについて説明しました。 ただし、それはすべてクライアント側にあります。

セキュリティを強化するために、サーバー側でも電子メールを検証することをお勧めします。

著者: Habdul Hazeez
Habdul Hazeez avatar Habdul Hazeez avatar

Habdul Hazeez is a technical writer with amazing research skills. He can connect the dots, and make sense of data that are scattered across different media.

LinkedIn

関連記事 - JavaScript Regex