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

如何编写正则校验含最多2个连字符的字段 拦截全重复数字

正则校验规则调整方案

需求梳理

待校验字段需同时满足以下规则:

  • 以1个英文字母开头
  • 首字母后共包含15位字母/数字有效字符,字符间最多可插入2个连字符(-),连字符不可出现在字符串首尾
  • 非法场景:去除所有连字符后,首字母后的15位有效字符完全重复(例如N000000000000000、N000000-0000-00000这类后序全为0的值需拦截)

原有正则缺陷

原有正则代码:

^(?!^(.)\\1*$)([A-Z]{1}(?=[A-Z0-9-]{2,15}$)[A-Z0-9]*(?:\\-[A-Z0-9]*){0,2}[A-Z0-9]+$)

核心问题是负向预查逻辑(?!^(.)\\1*$)仅判断原始完整字符串是否为全重复字符,没有跳过连字符做判断,也没有针对首字母后的有效字符段做重复校验,因此无法拦截带连字符的后序全重复值。

调整后可用正则

^[A-Z](?!(?:-*([A-Z0-9])(?:-*\1)){15}$)(?=[A-Z0-9-]{15,17}$)[A-Z0-9]*(?:-[A-Z0-9]*){0,2}$

逻辑说明

  • 开头^[A-Z]强制要求首字符为大写英文字母,如需支持小写可增加大小写不敏感修饰符i
  • 新增的负向预查(?!(?:-*([A-Z0-9])(?:-*\1)){15}$)会自动跳过连字符,校验首字母后的15个有效字符是否完全一致,只要后序全为同一个字符(无论中间插了几个、插在什么位置的连字符)都会被拦截
  • 长度预查(?=[A-Z0-9-]{15,17}$)精准控制总长度:首字母占1位,后序15个有效字符加最多2个连字符,总长度范围为16~18位
  • 保留原有连字符控制逻辑(?:-[A-Z0-9]*){0,2},确保连字符最多出现2次,且不会出现在字符串首尾

校验效果验证

  • 可正常通过的合法值:N1234567890ABCDE、A1234-567890-12345、B1a2b3c4d5e6f7g(开启大小写不敏感时)
  • 会被拦截的非法值:
    • 格式错误:开头为数字、连字符超过2个、连字符出现在首尾、总长度不符合要求
    • 重复值:N000000000000000、N000000-0000-00000、AAAAAAAA-AAAA-AAA这类后序有效字符全重复的值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:24:26