2012-11-07 102 views
2

應該驗證這樣的事情正則表達式來驗證用逗號分隔的數字或破折號

12,14,15,18-20,23,50-130 

我想這一點:

^(?:\\d[,] | \\d[-])$ // or ^(?:\\d[,] | \\d[-] *)$ ?? 

編輯 應該爲

12, 15 
11,13, 14,18, 51-52 
工作

它不適用於

w,12 
12,15d 
14,,18 
14--20 
12,12- 
-12,13 
,12 
12, 
13-, 
-,13 
+3

那麼,有什麼問題? – Oded

+0

什麼不應該有效?哪裏有更多有效和無效投入的例子? – Oded

+2

這應該驗證給定的字符串:'12,14,15,18-20,23,50-130' ;-)如果有任何這樣的問題,您不得不舉例說明您嘗試實現的規則。對於任何給定的例子(或者甚至是一組例子),可以提出一個匹配例子的規則,但是不正確,因爲沒有列出的東西沒有正確匹配。正則表達式用來表達規則,不知道這些規則,你不能創建一個好的正則表達式。 – Chris

回答

2

首先,使用逐字串避免雙反斜槓。然後這可能會爲你做:

@"^\s*\d+(?:-\d+)?\s*(?:,\s*\d+(?:-\d+)?\s*)*$" 

這將是一個數字,可選後跟連字符號碼。然後再任意數量的,,空白和開始模式。

+0

我想'5465,5-45-56'應該匹配 – Anirudha

+0

@ Fake.It.Til.U.Make.It怎麼回事?對我來說,這看起來像數字範圍的枚舉(如打印對話框中的「頁面」字段)。 –

0

你也可以試試這個

@"^\s*\d+(\s*[,-]\s*\d+)*\s*$" 
+0

然後你應該注意到,這允許多個連字符之間沒有逗號;) –

+0

@ m.buettner可能..但是op從來沒有說過關於..:O – Anirudha

+1

這就是爲什麼我不說你的解決方案是錯誤的。但是值得一提的是OP,你不覺得嗎? –

相關問題