正则表达式用于逗号分隔特定范围内的数字

时间:2015-11-04 12:22:01

标签: javascript regex

我需要正则表达式,用最小和最大数量限制验证逗号分隔的数字。我尝试了这个正则表达式,但没有运气

^(45|[1-9][0-5]?)$

我想要这样的列表(最小数字是1,最大数字是45)

23,45,3,7,1,9,34

3 个答案:

答案 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

demo

答案 2 :(得分:0)

我很想使用正则表达式(取决于需要)和数组迭代器(不是for..in枚举)的组合(例如ES5)

&#13;
&#13;
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;
&#13;
&#13;

或者只是简单地

&#13;
&#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;
&#13;
&#13;