首页 > 解决方案 > 带破折号分隔符的 RegEX 14 位验证

问题描述

我正在使用以下正则表达式^[\d]{4}[-]?[\d]{6}[-]?[\d]{4}$ 来验证 14 个数字作为一个整体或划分为

4 digits - 6 digits - 4 digits

以下四个示例与我的正则表达式匹配,但我想排除最后两个示例。

标签: javascriptjavaregexvalidation

解决方案


您可以对不想匹配的模式进行负面展望并使用此正则表达式,

^(?!\d{4}-\d{10})(?!\d{10}-\d{4})\d{4}-?\d{6}-?\d{4}$

解释:

  • ^--> 字符串开头
  • (?!\d{4}-\d{10})--> 负前瞻以避免匹配此模式
  • (?!\d{10}-\d{4})--> 负前瞻以避免匹配此模式
  • \d{4}-?\d{6}-?\d{4}--> 匹配你想要的模式
  • $--> 字符串结束

演示

我能想到的另一种模式,更简单优雅,你可以用这个,

^\d{4}(-?)\d{6}\1\d{4}$

解释:

  • ^--> 字符串开头
  • \d{4}--> 正好匹配四位数字
  • (-?)--> 匹配一个可选的连字符并在组 1 中捕获
  • \d{6}--> 精确匹配六位数
  • \1--> 这确保两个连字符都存在或不存在,如正则表达式中所述
  • \d{4}--> 正好匹配四位数字
  • $--> 字符串结束

演示


推荐阅读