REGEX 用逗号分隔的唯一数字

标签 regex

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

  • 2,4,6,7,1 是有效输入。

  • 2、2、6 无效

  • 2 有效

  • 2、无效

  • 1,2,3,4,15,6,7,31 有效

  • 1,2,3,4,15,6,7,32 无效

  • 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 位数字的数字范围,只需在周围添加单词边界
捕获组和反向引用。
隔离一个完整的数字。

这个特定的数字范围是 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/>');
      });

关于REGEX 用逗号分隔的唯一数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45946266/

相关文章:

javascript - 使用字符串中的键/值对创建对象?

r - 标准化电话号码数据

java - 为什么会出现 java.lang.IllegalArgumentException?

python - Django url 模式 - 字符串参数

Oracle PL/SQL 中的正则表达式从包含电话号码的字符串中删除不需要的字符

c# - 从 html 创建 pdf 时,如何隐藏具有特定类的图像?

mysql LIKE 和正则表达式 VS RLIKE 和变音符号

javascript - 正则表达式,JS : Match text to end of line after specific word without including word in match

javascript - 匹配 [word] 但不匹配 [word] 撇号正则表达式

javascript - 如何测试字符串中是否包含 Markdown