我试图验证一个逗号分隔的数字列表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位数的数字范围,只需在
捕获组和反向引用周围添加单词边界。
这将隔离一个完整的数字。
这个特别的是编号范围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/>');
});
是有效输入。 无效 有效 无效 无效(只有7个数字) 我尝试了,但它接受重复的数字
我试图验证数字1-8的逗号分隔列表。
null 无效示例: 关于只有当值是唯一的时,我如何匹配有什么建议吗?
作为前言,我意识到还有其他关于逗号分隔数字的正则表达式的主题,但当我试图使用这些解决方案时,它们都不起作用。
我如何修改我的regex来为那些以“”或“,”开头,以“”或“,”结尾的字符串返回false