You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建特殊字符不可紧跟句号的邮箱验证正则表达式?

邮箱验证正则表达式优化方案

现有正则及已实现规则

当前使用的正则表达式:

(?!^.*([._%+$-])\1+.*$)^[a-zA-Z0-9][a-zA-Z0-9._%+$-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,7}$

已满足以下验证规则:

  • 禁止连续句号(如customer@yahoo..com为无效)
  • 禁止用户名以特殊字符开头(如#customer@yahoo.com为无效)
  • 禁止用户名包含连续两个特殊字符(如cu$$tomer@yahoo.com为无效)
  • 域名后缀长度至少为2位(如customer@yahoo.c为无效)
  • 域名后缀长度最多为7位(如customer@yahoo.commmmmmm为无效)

待解决问题

需要新增规则:用户名中的特殊字符不可紧跟在句号之后(如customer.name.#name2@yahoo.com为无效),之前尝试添加的负向预查未生效,尝试的正则如下:

(?!^.*([._%+-])\1+.*$)(?!^.*(.)\2+([._%+-])$)^[a-zA-Z0-9][a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,7}$

解决方案

你之前添加的第二个负向预查逻辑错误,未命中“句号后紧跟特殊字符”的场景。只需新增一个匹配\.[._%+$-]模式的负向预查即可解决问题。

优化后的正则表达式

(?!^.*([._%+$-])\1+.*$)(?!^.*\.[._%+$-].*$)^[a-zA-Z0-9][a-zA-Z0-9._%+$-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,7}$

规则解释

  1. (?!^.*([._%+$-])\1+.*$):保留原逻辑,禁止连续重复的特殊字符(含连续句号)
  2. (?!^.*\.[._%+$-].*$):新增负向预查,确保用户名部分不会出现“句号紧跟特殊字符”的组合
  3. 主体匹配逻辑不变:保证用户名以字母/数字开头,域名及后缀符合长度要求

测试验证

  • 有效示例:customer.name@yahoo.com、user+tag_name@domain.co.uk
  • 无效示例:
    • customer.name.#name2@yahoo.com(句号后紧跟特殊字符)
    • cu$$tomer@yahoo.com(连续特殊字符)
    • #customer@yahoo.com(特殊字符开头)
    • customer@yahoo..com(连续句号)
    • customer@yahoo.c(后缀长度不足2)
    • customer@yahoo.commmmmmm(后缀长度超过7)

内容的提问来源于stack exchange,提问作者Aroff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:38:17