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}$