2009-02-09 61 views
7

我有一個取值爲窗體上的字段:-1,2-10,99正則表達式匹配2-10,但不是99

我的影片涉及的答案2-10業務規則。

我想寫一個正則表達式,將匹配2-10但而不是 99,我有麻煩。

原始表達式:

^2|3|4|5|6|7|8|9|10$ 

失敗,因爲99被匹配(在技術上,兩次)。此外,線條邊界是我從來不喜歡的東西。我在expresso上的行爲與我在其他地方(例如.net)的行爲不同。在這個特定的例子中,正則表達式正在javascript中運行。無論如何,快報似乎忽略它們(如果我把值括號:

^[2|3|4|5|6|7|8|9|10]$ 

^[2-9]$ 

「所有拼寫」或爲一個範圍,快報如果我指定開行/串收線永遠不會返回任何匹配/字符串(是的,我試圖在第二種情況下分別匹配10個)

我知道,我知道如果你使用正則表達式來解決問題,那麼你有兩個問題他們會開始邀請朋友過來,東西1和東西2風格)我不在這裏使用一個;我可以切換到一個case語句,但似乎我應該能夠在這裏使用正則表達式,這似乎是合理的事情要做。當涉及到正則表達式時,我仍然很綠。

回答

20

你需要這些。我將進一步使用範圍讓事情變得可讀:

^([2-9]|10)$ 
7

周圍使用交替括號,因爲串聯的優先級高於交替:

^(2|3|4|5|6|7|8|9|10)$ 
+0

或更緊湊的形式^([2-9] | 10)$ – 2009-02-09 16:30:17

+0

那麼爲什麼這不匹配Expresso中的任何東西?我已經有數字值插入到示例文本窗口中,但沒有匹配?必須有一些我需要調整的設置,但Expresso把我扔到這裏。 – peacedog 2009-02-09 16:48:13

+0

@Martin - 你錯過了一個詭計,看到靈魂泉回答:) – annakata 2009-02-09 16:48:35

0

您的原始表達式失敗的原因是因爲你匹配^ 2,3,4,5,6,7, 8,9,10 $。

嘗試此正則表達式:^(2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10)$

46

這顯然是其中不應該使用正則表達式,但數值的評價的情況下:

var num = parseInt(aNumber, 10); 
if (num >= 2 && num <= 10) { 
    alert("Match found!"); 
} 
1

一個完整的JavaScript函數要匹配2雖然9或10

<script type="text/javascript"> 
    function validateValue(theValue) 
    { 
     if(theValue.match(/^([2-9]{1}|10)$/)) 
     { 
      window.alert('Valid'); 
     } 
     else 
     { 
      window.alert('invalid'); 
     } 
     return false; 
    } 
</script> 

正則表達式是很容易擴展到包括所有規則:

/^(-1|[2-9]|10|99)$/ // will match -1, 2-10, 99 

編輯:我忘了提及,你將不得不用你自己的真/假情境邏輯。 edit2:在第二個正則表達式中添加了缺失的括號。