2016-02-05 45 views
-5

应该是正则表达式什么用于检查值是(1000〜20000)的范围正则表达式中JavaScript来检查值在范围

+7

正则表达式矫枉过正。不要对所有东西都使用正则表达式。上帝给了我们[比较操作员](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators)。 – Tushar

+4

当问问题显示你的努力时,不要期望通过倾销需求来获得代码。 – Tushar

+0

'var re,j,a = [];对于(j = 1000; j <= 20000; j ++){a.push(j);} re = new RegExp(“^(”+ a.join(“|”)+“)$”);'(No我不认真,它会起作用吗?是的,你应该这样做吗?不。) – nnnnnn

回答

0

^(20000 | [1] {0,1} [\ d] { 4})$

^和$确保将整个输入字符串作为一个整体进行测试。否则,我们最终可能会在部分匹配上产生误判,如6200007为真。

(xxx | yyy)表示“匹配xxx或yyy”。这是必要的,因为很容易说“匹配4位数字”,基本上是1000-9999。也很容易说,无论是否是首发1.但是由于你的最大值是20000,我不能用正则表达式来说“开始1或2”,因为开始的“2”必须不允许任何跟随除了0之外的数字。

因此,字符串必须完美匹配20000,或者任何4个数字加上可能的1作为前缀。

测试:

/^(20000|[1]{0,1}[\d]{4})$/.test('20000')

1

正则表达式是这个错误的工具。举个例子,假设我们想检查值在50到100的范围内。用正则表达式,你不能用数字来思考,相反,你不得不考虑哪些字符串是该范围的有效表示。

所以,我们注意到字符串方面的想法是,第一位必须是5678或除非我们有3位应该是一个19

让事情简单化和处理字符串100作为给我们的正则表达式的特殊情况:

100|[5-9][0-9] 

现在,让我们来看看另一个例子。比方说,你想在1000和9999之间,我们按照上面的思路号码这将使我们:

[1-9][0-9][0-9][0-9] 

可以简化为:

[1-9]\d{3} 

然后,您可以考虑范围10000至20000为一个特殊的情况,为它写一个正则表达式,然后使用|运算符将它与上面的正则表达式结合起来。

我会留下实际的解决方案供您解决。

不过,regex是这个错误的工具。这很容易做到:

x >= 1000 && x <= 20000 

而且它比正则表达式更容易理解。更容易理解=更少的错误。

1

请找到下面的代码:

function numInRange(numberStr) { 
    var res = numberStr.search(/(^[1-9][0-9]{3}$)|(^[1][0-9]{4}$)|(^[2][0]{4})/); 
    return res == 0; 
} 

numInRange("999"); 
numInRange("1000"); 
numInRange("2000"); 
numInRange("9999"); 
numInRange("10000"); 
numInRange("20000"); 
numInRange("20001"); 
相关问题