带有破折号的RegEX 14位数字验证

时间:2018-11-13 19:40:05

标签: javascript java regex validation

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

4 digits - 6 digits - 4 digits

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

  • 1111-111111-1111-(根据我的业务逻辑有效)
  • 12341234561234-(根据我的业务逻辑有效)
  • 1111-111111111-(我希望它无效)
  • 1111111111-1111-(我希望它无效)

3 个答案:

答案 0 :(得分:2)

对于不想匹配的模式,您可以对其进行否定检查,并使用此正则表达式,

^(?!\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}->根据需要匹配模式
  • $->字符串结尾

Demo

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

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

说明:

  • ^->字符串开头
  • \d{4}->精确匹配四位数字
  • (-?)->匹配可选的连字符并捕获组1中的内容
  • \d{6}->精确匹配六位数字
  • \1->确保正则表达式中提到的两个连字符都存在或不存在
  • \d{4}->精确匹配四位数字
  • $->字符串结尾

Demo

答案 1 :(得分:2)

只需在模式或14个数字上使用或即可。

var re = /^(\d{4}-\d{6}-\d{4}|\d{14})$/

function test(str) {
  console.log(str, re.test(str))
}

['1234-123456-1234', '12341234561234',
'1234-1234561234', '1234123456-1234'].forEach(test)

答案 2 :(得分:0)

^([\ d] {4} [-]?[\ d] {6} [-]?[\ d] {4})|([\ d] {16})$

希望这会有所帮助! 它有两个正则表达式,一个与整数,另一个与整数(16位数字)