2011-04-27 76 views
9

我搜索了很多,找不到這個RegExp的解決方案(我不得不說我對Reg.Expressions不是很有經驗)。RegExp數字範圍(1到36)

我想測試一個介於1和36之間的數字,不包括0和37以上。

到目前爲止,我已經得到了什麼,幾乎工程(不接受17,18,19,27,28,29)...

^[1-9]{1}$|^[1-3]{1}[0-6]{1}$|^36$; 

有人可以幫我嗎?

+0

這是一個要求:( – jackJoe 2011-04-27 22:56:05

回答

21

你知道\d,對不對?

^([1-9]|[12]\d|3[0-6])$ 

在控制檯試試這個:

function test() { 
    for(var i = 0; i < 100; i++) { 
     if (/^([1-9]|[12]\d|3[0-6])$/.test(i.toString()) != (i >= 1 && i <=36)) { 
      document.write(i + "fail"); 
     } 
       else 
       document.write(i + "pass"); 
     document.write("<br/>"); 
    } 
} 
+0

這個是真的很漂亮,謝謝! – jackJoe 2011-04-27 23:02:11

+0

+1對你,@harpo。我忘記了\ d :) – 2011-04-27 23:04:42

+0

@jackJoe,謝謝,雖然我有點倉促, 。 – harpo 2011-04-27 23:09:49

3

嘗試這種情況:

^[1-9]$|^[1-2][0-9]$|^3[0-6]$ 

(所有1位1和9,所有1x和2x數字之間3X數從30至36的數字,和)。

+0

我看到的邏輯,它是如此的「簡單」我需要更多的測試,但這個工程可愛,謝謝 – jackJoe 2011-04-27 22:57:38

0

試試這個:

/^[1-9]$|^[1-2]\d$|^3[0-6]$/ 

DEMO

+0

感謝您的答覆 – jackJoe 2011-04-27 22:58:38

1

嘗試^[1-9]$|^[1-2]\d$|^3[0-6]$

+0

感謝!回覆! – jackJoe 2011-04-27 22:58:24

10

^[0-9]|[0-2][0-9]|3[0-6]$

下面是它的一個細分:


[0-9] = 0-9
|任何位數= OR
[0-2][0-9] = '1' 或'2',後面跟0-9的任意數字
| =或
3[0-6] ='3',然後是0-6中的任何數字。

由於@mu太短說,使用整數比較會更容易,更高效。下面是一個例子功能:

function IsInRange(number) 
{ 
    return number > 0 && number < 37; 
} 
+0

thnaks的解釋,我真的需要它是一個正則表達式,否則我會用簡單的舊javascript解決它:) – jackJoe 2011-04-27 23:44:33

0

我不知道爲什麼所有的答案,這樣的重複之前的每個條件後加入邊界(^$)的錯誤。但是,你只需要做:

^[1-9]|[1-2][0-9]|3[0-6]$