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

如何用正则验证XXXX XXXX-XXXX XXXX-XXXX-XXXX-XXXX-XXXX数字格式?

修正正则表达式匹配指定格式

首先,咱们先明确你要匹配的固定格式:XXXX XXXX-XXXX XXXX-XXXX-XXXX-XXXX-XXXX,其中每个X是0-9的数字,这个格式的结构是固定的,不是可选分段,所以你之前用的正则[0-9]{4}(-?[0-9]{4})?完全没覆盖到所有的分隔符和重复结构,才会出现匹配错误的情况。

正确的正则表达式

你可以用这个严格匹配目标格式的正则:

^\d{4} \d{4}-\d{4} \d{4}(-\d{4}){4}$

或者用等价的[0-9]代替\d,更直白一点:

^[0-9]{4} [0-9]{4}-[0-9]{4} [0-9]{4}(-[0-9]{4}){4}$

拆解一下这个正则的逻辑:

  • ^:匹配字符串的开头,确保前面没有多余字符
  • \d{4} :匹配第一组4位数字 + 空格
  • \d{4}-\d{4} :匹配第二组4位数字 + 连字符 + 第三组4位数字 + 空格
  • \d{4}:匹配第四组4位数字
  • (-\d{4}){4}:匹配「连字符 + 4位数字」这个组合重复4次(对应后面的四组XXXX-XXXX-XXXX-XXXX)
  • $:匹配字符串的结尾,确保后面没有多余字符

为什么之前的正则不行?

你原来的[0-9]{4}(-?[0-9]{4})?只能匹配两种情况:

  1. 单独的4位数字
  2. 4位数字 + 可选的连字符 + 4位数字
    完全没有考虑到格式里的空格,也没有处理多次重复的分段,所以会错误匹配到像4586-4584-5588-5558-5888-5545这种不符合空格位置的字符串。

测试示例

  • 匹配成功的合法格式:1234 5678-9012 3456-7890-1234-5678-9012
  • 匹配失败的非法格式:4586-4584-5588-5558-5888-5545(缺少规定位置的空格)、12345 6789-0123 4567-8901-2345-6789-0123(第一组是5位数字)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:41:04