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

正则表达式问题排查:为何无法拦截末尾带++或--的输入参数?

正则表达式问题排查:为何无法拦截末尾带++或--的输入参数?

嘿,我来帮你揪出这个问题的根源!

你现在用的正则是这行:

r"^(ABC-\d{2,9})|(ABz?-\d{3})$"

问题出在两个匹配分支的锚定规则不统一上:

  • 第一个分支^(ABC-\d{2,9})只加了开头锚定^,却没加结尾锚定$。这就意味着,只要字符串开头能匹配上ABC-加2到9位数字,不管后面跟了啥(比如你说的++、--,甚至其他乱七八糟的字符),正则都会直接判定“匹配成功”——它只会认前面符合规则的那一段,完全不管后面的多余内容。
  • 第二个分支(ABz?-\d{3})$倒是加了结尾锚定$,所以像AB-123、ABz-123这类输入不会出问题,但第一个分支的漏洞直接拖了后腿,导致带多余字符的ABC-xx++这类输入漏网了。

简单修复方案

把两个分支用括号包起来,然后在整体末尾加上$,让正则要求整个字符串必须完全匹配其中一个分支,不能有任何多余内容:

r"^(ABC-\d{2,9}|ABz?-\d{3})$"

修改后你可以放心:

  • 你原本认定的合法输入依然能正常匹配:
    • ABC-12
    • ABC-123456789
    • AB-123
    • ABz-123
  • 而像ABC-12++、ABC-987--这类末尾带多余字符的输入,就会因为没法完全贴合规则被拦下来啦。

备注:内容来源于stack exchange,提问作者Tanu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 08:44:29