使用正则表达式通过分号验证一系列数值分隔符

时间:2018-06-08 14:52:55

标签: regex string

我需要一个正则表达式来验证格式的字符串使用Javascript

  

119,122,178-181,185,119,122,178-181,2,119,122,178-181,185,119,122,178-181,185,119,122,178-181,185,119,122,178-181,185,119,122,178-181,185,119,122,178-181,185,119,122,178-181,185

我的正则表达式https://regex101.com/r/nhFnKE/1

问题是可能存在“n - x”

之类的范围
  

0-1,2,3,4-7,8,9-20,21

非常感谢您的帮助

PS:空间管理并重复我将在另一个实例中执行

1 个答案:

答案 0 :(得分:3)

您可以将带有一个或多个数字的重复模式与可选部分匹配?匹配短划线和一个或多个数字后跟逗号或行尾$

^(?:\d+(?:-\d+)?(?:,|$))+$

或重复包含逗号的可选部分(?:\d+(?:-\d+)?,)*零次或多次,并确保最后一次匹配为\d+(?:-\d+)?

^(?:\d+(?:-\d+)?,)*\d+(?:-\d+)?$



const strings = [
  "119,122,178-181,185,119,122,178-181,2,119,122,178-181,185,119,122,178-181,185,119,122,178-181,185,119,122,178-181,185,119,122,178-181,185,119,122,178-181,185,119,122,178-181,185",
  "0-1,2,3,4-7,8,9-20,21",
  "0-1,2,test"
];
let pattern = /^(?:\d+(?:-\d+)?,)*\d+(?:-\d+)?$/;

strings.forEach((s) => {
  console.log(pattern.test(s));
});