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

如何重构引发SonarQube警告的Java邮箱验证正则表达式?

修复SonarQube提示的邮箱正则栈溢出问题

SonarQube警告的核心原因是正则中的嵌套重复捕获组(\.[A-Za-z0-9-]+)*,这类结构在处理超长输入(比如连续多个.xxx格式的域名片段)时,正则引擎会通过递归回溯来匹配,容易耗尽栈内存引发溢出。

修改后的正则表达式

"^(?=.{1,64}@)[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-z]{2,})整合为单个非捕获组,消除嵌套重复的递归逻辑,让引擎以线性方式处理域名匹配

匹配逻辑验证

修改后的正则完全保留原有匹配规则,可正常匹配以下格式邮箱:

  • username@domain.com
  • user.name@domain.com
  • user-name@domain.com
  • username@domain.co.in
  • user_name@domain.com

同时依然遵守原有的限制:

  • @前的用户名长度限制为1-64位
  • 用户名允许包含字母、数字、下划线、横杠,以及中间的点分隔符
  • 域名允许包含字母、数字、横杠,支持多级后缀,且最终后缀长度至少2位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:02:28