代码之家  ›  专栏  ›  技术社区  ›  Herman Andres Figueroa

使用正则表达式验证以分号分隔的数值范围

  •  1
  • Herman Andres Figueroa  · 技术社区  · 6 年前

    我需要一个正则表达式来验证格式字符串, 使用javascript :

    119122178-181185119122178-181、2119122178-181185119122178-181185119122178-181185119122178-181185119122178-181185119122178-181185119122178-181185119122178-181185185185185185185

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

    问题是可能有“n-x”这样的范围

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

    非常感谢你的帮助

    PS:空间管理和重复我将在另一个实例中执行此操作

    1 回复  |  直到 6 年前
        1
  •  3
  •   The fourth bird    6 年前

    你可以用一个或多个数字来匹配一个重复的模式和一个可选的部分?匹配破折号和一个或多个后跟逗号或行尾的数字的 $

    ^(?:\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));
    });