当前位置: 首页 > 知识库问答 >
问题:

用逗号分隔的REGEX唯一数字

陈允晨
2023-03-14

我试图验证一个逗号分隔的数字列表1-31唯一(不重复)。

20、15、3

我尝试^(([0]?[1-9])([1-2][0-9])(3[01]))(?!([0]?[1-9])([1-2][0-9])(3[01])*,\\1(?!([0]?[1-9])([1-2][0-9])(3[01]))但是它接受重复的数字

共有1个答案

司徒焕
2023-03-14

对于超过1位数的数字范围,只需在
捕获组和反向引用周围添加单词边界。
这将隔离一个完整的数字。

这个特别的是编号范围1-31

 ^                                       # BOS
 (?!                                     # Validate no dups
      .* 
      (                                       # (1 start)
           \b 
           (?: [1-9] | [1-2] \d | 3 [0-1] )        # number range 1-31
           \b 
      )                                       # (1 end)
      .* 
      \b \1 \b 
 )
 (?: [1-9] | [1-2] \d | 3 [0-1] )        # Unrolled-loop, match 1 to many numb's
 (?:                                     # in the number range 1-31
      , 
      (?: [1-9] | [1-2] \d | 3 [0-1] )
 )*
 $                                       # EOS
    var data = [
      '2,4,6,7,1',
      '2,2,6',
      '2,30,16,3',
      '2,',
      '1,2,3,2',
      '1,2,2,3',
      '1,2,3,4,5,6,7,8'
      ];
      
      data.forEach(function(str) {
        document.write(str + ' gives ' + /^(?!.*(\b(?:[1-9]|[1-2]\d|3[0-1])\b).*\b\1\b)(?:[1-9]|[1-2]\d|3[0-1])(?:,(?:[1-9]|[1-2]\d|3[0-1]))*$/.test(str) + '<br/>');
      });
 类似资料: