我需要正则表达式,用最小和最大数量限制验证逗号分隔的数字。我尝试了这个正则表达式,但没有运气
^(45|[1-9][0-5]?)$
我想要这样的列表(最小数字是1,最大数字是45)
23,45,3,7,1,9,34
答案 0 :(得分:2)
这个正则表达式将完成这项工作:
\b(([1-3][0-9])|(4[0-5])|[1-9])\b
答案 1 :(得分:2)
这不是正则表达式的工作(正则表达式对数字并不方便,想象一下像(247,69352)这样需要构建巨型模式的更复杂的范围)。所以我的建议是拆分你的字符串,然后逐个检查你的项目。
没有正则表达式的方式:
function numsInRange(s, min, max) {
var items = s.split(',');
for (var i in items) {
var num = parseInt(items[i], 10);
if (num != items[i] || num < min || num > max)
return false;
}
return true;
}
var s='23,45,3,7,1,9,34';
console.log(numsInRange(s, 1, 45)); // true
console.log(numsInRange(s, 1, 44)); // false
答案 2 :(得分:0)
我很想使用正则表达式(取决于需要)和数组迭代器(不是for..in
枚举)的组合(例如ES5)
var reIsPattern = /^[+\-]?(?:0|[1-9]\d*)$/;
function areNumsInRange(commaString, min, max) {
return commaString.split(',')
.map(Function.prototype.call, String.prototype.trim)
.every(function(item) {
return reIsPattern.test(item) && item >= min && item <= max
});
}
var s = '23,45,3,7,1,9,34';
document.body.textContent = areNumsInRange(s, 1, 45);
&#13;
或者只是简单地
function areNumsInRange(commaString, min, max) {
return commaString.split(',').every(function(item) {
var num = Number(item);
return num >= min && num <= max;
});
}
var s = '23,45,3,7,1,9,34';
document.body.textContent = areNumsInRange(s, 1, 45);
&#13;