2015-11-04 65 views
0

我需要正則表達式來驗證逗號分隔數字的最小和最大數量限制。我想這正則表達式,但沒有運氣正則表達式在特定範圍內的逗號分隔數字

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

我想要的清單這樣一個(分鐘數爲1,最大數爲45)

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

http://stackoverflow.com/questions/7944065/regex-for-javascript-validation-of-comma-separated-numbers或http:/ /stackoverflow.com/questions/16620980/comma-separated-numbers-regex或http://stackoverflow.com/questions/17960858/regex-javascript-numbers-comma-separated – Xotic750

回答

2

此正則表達式將做的工作:

\b(([1-3][0-9])|(4[0-5])|[1-9])\b 
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

+0

是的,好建議,我會牢記。謝謝 – Javid

+0

http://stackoverflow.com/questions/500504/why-is-using-for-in-with-array-iteration-such-a-bad-idea – Xotic750

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);

或許只是單純的

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);

相關問題