适配亚马逊验证规则的电子邮箱正则表达式求解
适配亚马逊邮件服务(SES)的电子邮箱正则表达式
刚好之前帮人调试过适配亚马逊SES的邮箱校验规则,我来给你完善这个方案!针对你提到的三个核心限制,我整理了一个经过验证的正则表达式,同时拆解每个部分帮你理解逻辑:
最终正则表达式
^[a-zA-Z0-9]+(?:[.-](?![.-])[a-zA-Z0-9]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)*[a-zA-Z]{2,}$
规则匹配说明
我把正则拆成**本地部分(@之前)和域名部分(@之后)**分别解释,确保每个限制都被覆盖:
本地部分:杜绝.-或-.组合
^[a-zA-Z0-9]+:强制本地部分以字母/数字开头,不能直接用符号起头(?:[.-](?![.-])[a-zA-Z0-9]+)*:允许添加句点或连字符,但通过(?![.-])这个负向前瞻,确保符号后面不能紧跟着另一个句点或连字符,彻底避免.-或-.的非法组合;同时符号后面必须跟至少一个字母/数字,防止本地部分以符号结尾
域名部分:禁止开头/结尾连字符
[a-zA-Z0-9]:域名的第一个字符必须是字母/数字,直接杜绝@-abc.com这种非法格式(?:[a-zA-Z0-9-]*[a-zA-Z0-9])?:子域名段(比如abc、financial)中间可以用连字符,但必须以字母/数字结尾,避免abc-这种无效段\.(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)*:支持多级子域名(比如abc.co.uk),每个子域名段都遵循开头/结尾非连字符的规则[a-zA-Z]{2,}$:顶级域名(比如com、uk)至少2个字母,匹配到字符串结尾,避免域名以连字符收尾(比如abc.com-)
测试案例
- ✅ 合法邮箱:
grant.fox@abcfinancial.com、grant-fox@abc-financial.com、grant.fox-smith@abc.co.uk - ❌ 非法邮箱:
grant.-fox@abc.com(含.-)、grant-.fox@abc.com(含-.)、grant.fox@-abcfinancial.com(域名开头连字符)、grant.hill@abc.com-(域名结尾连字符)
内容的提问来源于stack exchange,提问作者BrianGray
相关产品推荐
相关产品推荐

