2011-07-11 122 views
5

我不是很新的正則表達式,但我一直沒能找到我的問題的充分表達,到目前爲止:JavaScript的正則表達式

我要檢查一個字符串,用戶類型爲一個文本框。 該字符串必須包含一個或多個以分號分隔的術語。

實際上有兩種類型的術語:

  1. 第一由許多,後跟一個連字符,然後,接着是多個再次,例如1-422-44

  2. 第二項由一個數字和逗號重複零次或多次,例如, 1,24,5,6

的所有術語均用分號結束。

有效的輸入是:1-4;5,6,7;9-11;1,3;4-6;8,9,10;

我試過這麼多的變化,但無法找到一個解決辦法爲止。我的問題是,這個輸入字符串可能包含任意數量的項。我試圖用OR運營商和「前瞻」分別解決這個問題,但沒有成功。

任何幫助將不勝感激。

謝謝了, enne

+4

您的示例與您的描述不符。第一個「有效輸入」缺少最後的分號,而「22-44」不是「後跟連字符的數字......」。 –

+0

這是非常真實的Kerrek,添加了分號並將「數字」更改爲「數字」。謝謝你的評論。 – enne87

回答

4

此正則表達式應該做你需要的東西:

/^(?:[0-9]+-[0-9]+;|[0-9]+(?:,[0-9]+)*;)+$/ 
+0

這不接受'1-4; 5,6,7; 9-11',他的例子沒有終端';'。 – Vache

+0

@Vache - 注意到OP的要求不明確,因爲該示例不同意前面的語句「所有術語必須以分號結尾」。 – nnnnnn

+0

好點。該描述確實表示**「所有術語必須以分號結束」**,所以我認爲這包括最後一個術語。 – EdoDodo

2

編輯:第一個問題看上去分號分隔了,現在它顯示他們作爲終止。

這裏是一個或多個項的序列,以分號結束,其中每個項是一個數字或一個數字範圍或逗號分隔的數字的列表:

/^(\d+(-\d+|(,\d+)*)?;)+$/ 

對於非-capturing組

/^(?:\d+(?:-\d+|(?:,\d+)*)?;)+$/ 
+0

非常酷的雷,謝謝:)不幸的是,我只能設置一個答案作爲接受的答案:/ – enne87

1

我採取..

^(?:\d+-\d+(?:;|$)|(?:\d+(?:[,;]|$))+)+$

+0

不錯,只是最後一個詞的最後一個分號丟失。謝謝你的幫助。 – enne87