邮箱地址的通用格式由本地部分和域名部分组成,中间用@符号连接,本地部分可以包含字母、数字、下划线、点号等字符,域名部分则由字母、数字、点号和连字符组成,且需要包含顶级域名。基于这些规则,我们可以编写对应的正则表达式完成校验。

基础邮箱验证正则表达式
如果只需要满足大多数常见邮箱的校验需求,不需要过度严格的规则,可以使用以下基础正则:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$
这个正则的含义如下:
^表示匹配字符串的开头[a-zA-Z0-9._%+-]+匹配本地部分,允许字母、数字、点号、下划线、百分号、加号、减号,且至少出现一次@匹配邮箱必须的@符号[a-zA-Z0-9.-]+匹配域名的主域名部分,允许字母、数字、点号、减号,至少出现一次.[a-zA-Z]{2,}匹配顶级域名,点号后接至少2个字母$表示匹配字符串的结尾
JavaScript中实现邮箱正则验证
在JavaScript中可以直接使用正则的test方法完成校验,以下是完整示例:
// 定义邮箱验证正则
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$/;
// 待验证的邮箱
const testEmail1 = "test@ippipp.com";
const testEmail2 = "invalid_email@com";
const testEmail3 = "user.name+tag@ipipp.com";
// 执行验证
console.log(emailRegex.test(testEmail1)); // 输出 true
console.log(emailRegex.test(testEmail2)); // 输出 false
console.log(emailRegex.test(testEmail3)); // 输出 true
Python中实现邮箱正则验证
Python需要引入re模块来使用正则表达式,实现示例如下:
import re
# 定义邮箱验证正则
email_regex = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$"
# 待验证的邮箱
test_email1 = "test@ippipp.com"
test_email2 = "invalid_email@com"
test_email3 = "user.name+tag@ipipp.com"
# 执行验证
print(bool(re.match(email_regex, test_email1))) # 输出 True
print(bool(re.match(email_regex, test_email2))) # 输出 False
print(bool(re.match(email_regex, test_email3))) # 输出 True
更严格的邮箱验证正则
如果需要符合RFC 5322标准的更严格校验,可以调整正则为:
^(?:[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[x01-x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|\[x01-x09x0bx0cx0e-x7f])*")@(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-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-zA-Z0-9-]*[a-zA-Z0-9]:(?:[x01-x08x0bx0cx0e-x1fx21-x5ax53-x7f]|\[x01-x09x0bx0cx0e-x7f])+)])$
这个正则覆盖了更多特殊字符和引号包裹的本地部分场景,但日常开发中基础版本已经足够满足大部分需求,避免过度复杂导致性能问题或者不必要的校验失败。
注意事项
- 正则验证只能校验格式是否符合规则,无法验证邮箱是否真实存在,如果需要验证邮箱有效性,还需要发送验证邮件确认
- 不同邮箱服务商的本地部分规则可能有细微差异,如果业务有特殊邮箱格式需求,可以针对性调整正则的字符范围
- 正则中的点号需要转义为.,否则会匹配任意字符,导致校验不准确
正则表达式邮箱验证JavaScriptPython修改时间:2026-06-14 07:09:14