Javascript 验证数字的范围
我试图验证一个逗号分隔的数字列表1-384唯一(不重复) i、 eJavascript 验证数字的范围,javascript,regex,Javascript,Regex,我试图验证一个逗号分隔的数字列表1-384唯一(不重复) i、 e 1,2,3,5,6,7,9有效 1-3,5-7,9有效 2,2,6是无效的 2、无效 1、2、3、4、15、6、7、385无效,因为最后一个数字大于384 我尝试了以下正则表达式模式,但还不够: /^(?!.*(\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]))*$/ 对于仅使用正则表达式来说
- 1,2,3,5,6,7,9有效
- 1-3,5-7,9有效
- 2,2,6是无效的
- 2、无效
- 1、2、3、4、15、6、7、385无效,因为最后一个数字大于384
/^(?!.*(\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]))*$/
对于仅使用正则表达式来说,这不是一个很好的用例。除了使用正则表达式之外,还需要应用一些逻辑 例如
- 使用
,
- 然后检查它是否是介于
之间的范围表达式-
- 然后验证各个表达式以检查唯一性和边界
- 你可以试试这个-
函数有效(str){
设下限=1,上限=384;
//删除不必要的空间
str=str.replace(/\s/g');
//用逗号(,)拆分字符串
常量nums=str.split(',');
const track={};
//访问数字
for(常量num的数量){
//检查是否有任何数字包含破折号(-)
如果(/\-/.test(num)){
//如果有破折号,则按破折号拆分,得到上下限。
常量[l,u]=num.split('-').map(x=>x*1);
//从下界到上界的访问
for(设i=l;i'+(isValid(str)?'Valid':'Invalid');
}
.as控制台包装{min height:100%!important;top:0}
一个过滤器和设置可能更容易看到
“1-385”也是假的吗
const isValid=str=>{
str=str.replace(/\s+/g,“”)
常量rng=str.split(“,”).filter(项=>{
如果(item==null | | item===“”)返回false
如果(isNaN(项目)){
常量[from,to]=项拆分('-'))
从>0返回+从<385&&&
+至>0&&+至<385
}
项目=+项目
返回项>0&&项<385;
});
返回[…新集合(rng)]。连接(“,”==str;
};
常量arr=[“1,2,3,5,6,7,9”,
"1-3, 5-7, 9",
"1-385",
"1-384",
"2, 2, 6",
"2,",
"1, 2, 3, 4, 15, 6, 7, 384",
"1, 2, 3, 4, 15, 6, 7, 385",
"0, 2, 3"
]
const res=arr.map(str=>({[str]:isValid(str)}));
console.log(res)
问题出在哪里?另外,检查一个数字是否属于某个特定范围,以及一个数字是否重复,最好用一点JavaScript代码来实现。1-3,5-7,9
在JS中不是逗号分隔的数字列表。这可能是-2,-2,9
或“1-3”,“5-7”,9
是什么使2,
无效,逗号?@mplungjan,是的,逗号使其无效。