如何编写不允许以.mil结尾的邮箱地址正则验证规则
禁止.mil后缀邮箱的表单校验正则
最终可用正则
# 支持负向后顾断言的现代正则引擎可用(推荐,逻辑更直观) ^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(?<!\.mil)$ # 兼容不支持负向后顾的旧引擎版本 ^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@(?!.*\.mil$)[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$
规则拆解
通用邮箱格式部分(两段正则共用)
^:匹配字符串起始位置,避免邮箱前有多余字符时漏校验[_a-zA-Z0-9-]+:匹配邮箱前缀的基础字符,允许大小写字母、数字、下划线、横杠,至少出现1次(\.[_a-zA-Z0-9-]+)*:匹配邮箱前缀中的点分隔分段,*代表该分段可以出现0次或多次,兼容a.b.c@xxx.com这类带点的前缀格式@:匹配邮箱固定分隔符@[a-zA-Z0-9-]+:匹配域名的首段内容,允许大小写字母、数字、横杠(\.[a-zA-Z0-9-]+)*:匹配域名的多级后缀,支持.com、.com.cn这类多级域名格式$:匹配字符串结束位置,避免邮箱后有多余字符时漏校验
排除.mil后缀的核心规则
- 推荐版规则
(?<!\.mil):负向后顾断言,校验字符串结束前的内容不是.mil,直接排除所有以.mil结尾的输入 - 兼容版规则
(?!.*\.mil$):负向前瞻断言,放在@符号之后,校验@后的所有内容不会以.mil结尾,实现相同的拦截效果
校验效果验证
- 放行示例:
test@example.com、user.name@org.gov、admin@sub.domain.net - 拦截示例:
officer@army.mil、staff@us.navy.mil、test@mil
内容的提问来源于stack exchange,提问作者audreywrong
相关产品推荐
相关产品推荐

