Logo Wand.Tools

正規表現ジェネレーター

正規表現を智能生成・解説し、様々な一般的なパターンマッチングをサポート

正規表現によるメールアドレスのマッチング - 完全チュートリアル

  # 正規表現によるメールアドレスのマッチング - 完全チュートリアル
  
  ## 基本的なメールのマッチング
  
  最もシンプルなメールマッチングの正規表現:
  ```regex
  \S+@\S+\.\S+

マッチング例:

一般的なメールフォーマットのマッチング

標準的なメールフォーマットの正規表現:

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

特徴:

  • 大文字・小文字のアルファベット、数字を許可
  • . _ % + - などの特殊文字に対応
  • ドメイン部分は少なくとも2文字

厳密なメール検証

RFC 5322標準の正規表現:

^(?:[a-z0-9!#$%&'*+/=?^_\{|\}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_\{|\}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$

国際的なメールへの対応

Unicode文字をサポートする正規表現:

^[^\s@]+@[^\s@]+\.[^\s@]+$

またはより厳密なバージョン:

^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$

正規表現の分解

標準的なメール正規表現を例に:

^                         # 文字列の開始
[a-zA-Z0-9._%+-]+        # ユーザー名部分
@                         # @記号
[a-zA-Z0-9.-]+           # ドメイン部分
\.                        # ドット
[a-zA-Z]{2,}             # トップレベルドメイン
$                         # 文字列の終了

各言語での実装例

JavaScript

const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;

Python

import re
email_regex = re.compile(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$')

PHP

$emailRegex = '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/';

Java

Pattern emailPattern = Pattern.compile("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$");

よくある質問

1. IPアドレス付きのメールアドレスにマッチさせるには?

^[a-z0-9._%+-]+@([0-9]{1,3}\.){3}[0-9]{1,3}$

2. ポート番号付きのメールアドレスにマッチさせるには?

^[a-z0-9._%+-]+@[a-z0-9.-]+:\d+$

3. 特定のドメインのメールアドレスを除外するには?

^(?!.*@(spamdomain|blocked)\.com$)[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$

パフォーマンス最適化

  1. キャプチャしないグループ (?:) をキャプチャグループ () の代わりに使用する。
  2. 過度に複雑なネスト構造を避ける。
  3. Webフロントエンドで先に基本的な検証を行う。
  4. 頻繁に使用する正規表現は事前にコンパイルする。
^(?=[a-z0-9@.!#$%&'*+/=?^_\{|\}~-]{6,254}$)[a-z0-9._%+-]{1,64}@(?:[a-z0-9-]{1,63}\.){1,8}[a-z]{2,63}$