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

匹配含最多2个空格的12位数字序列的正则表达式需求

匹配12位数字且最多含2个空格的正则表达式

需求很明确:要匹配由恰好12个数字组成的序列,数字之间最多可以插入2个空格(不管是单个间隔里的2个连续空格,还是两个间隔各1个空格),绝对不能包含换行符,而且序列首尾必须是数字。

有效示例

  • 3345624 90812(7位数字+1个空格+5位数字)
  • 908 7865123 23(3位+1空格+7位+1空格+2位,总空格数2)
  • 908765312334(无空格,纯12位数字)
  • 90878903556 1(11位+1空格+1位)
  • 67555123452 5(11位+2空格+1位)

原表达式的问题

你提到的 /[0-9|\s]{12,14}/ 完全满足不了需求,问题出在这几点:

  1. 用了\s,会匹配换行符,不符合要求
  2. 允许序列开头或结尾是空格,比如" 123456789012"这种无效内容也会被匹配
  3. 没限制数字总数,比如10个数字加4个空格(总长度14)也会被放行,但数字数量根本不够12
  4. 管不住空格的数量和位置,比如多个间隔的空格只要总长度在12-14之间就会被匹配,比如"1 2 34567890"(10个数字+3个空格)这种完全不符合的也能通过

正确的正则表达式

这里给两个靠谱的版本:

版本一(严格限制首尾为数字)

^\d(?=(?:\D*\d){11}$)[0-9 ]{11,13}\d$

版本二(更简洁,依赖预查控制数字数量)

^(?=(?:\D*\d){12}$)[0-9 ]{12,14}$

表达式解释

  • ^ 和 $:锚定字符串的开头和结尾,确保我们匹配的是整个序列,不是其中一段
  • (?=(?:\D*\d){12}$):正向预查,强制整个序列里必须恰好有12个数字(\D*\d 表示“任意非数字字符+一个数字”,重复12次就保证了数字总数)
  • [0-9 ]{12,14}:匹配由数字和空格组成的12到14个字符(12个数字加上0-2个空格,刚好是这个长度范围)
  • 版本一里的^\d和\d$额外锁死首尾必须是数字,彻底杜绝空格出现在两端的情况

验证效果

这两个表达式能匹配所有你给出的有效示例,同时会拒绝以下无效情况:

  • 首尾带空格的序列
  • 数字数量不足12的序列
  • 空格总数超过2的序列
  • 包含换行符的序列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 15:57:03