2014-10-31 22 views
1

我有一個數字和分隔符的字符串。 這些數字可以用commahyphen分開。但可能永遠不會有兩個數字,它們之間用逗號分隔,而沒有逗號。如何使用正則表達式驗證破折號分隔值?

例子:

有效:123,12,2,1-3,1,1-3,1

無效:123,12,2,1-3,1,1-3-5,1

我有一個正則表達式,幾乎工程,但它不檢測這些1-3-5無效線路。

如何改進以下內容?

^([0-9])+((,|-)[0-9]+)*$ 

回答

1

你可以分解你的輸入:

  • 正常:一個或多個數字,後面可以跟一個破折號然後一個或多個數字;
  • 特殊:逗號。

正常情況下的正則表達式可以寫爲\d+(?:-\d+)?;對於特殊情況,這只是,

運用normal* (special normal*)*模式,並添加錨和量詞,我們有:

^\d+(?:-\d+)?(,\d+(?:-\d+)?)*$ 
2

這裏有一個解決方案:

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

Demo

說明:匹配一個號碼,後面可以跟一個破折號和另一個數字,然後匹配逗號或字符串的結尾。並重復。

1

可以使用環視這將搜索-digits-讓你的正則表達式可以像添加條件:

^(?!.*-\\d+-)[0-9]+([,-][0-9]+)*$ 
^^^^^^^^^^^^-negative look-ahead, match will fail if there is any -digits- in your string 
+0

它不工作http://regex101.com/r/gO7yT8/2 – 2014-10-31 22:44:23

+0

@ alphabravo使用'\ d'而不是'\\ d'。在Java中,'''''也需要在String中轉義,所以我這樣寫了。 – Pshemo 2014-10-31 22:47:51

+0

我明白了,你還必須添加'^'錨。 – 2014-10-31 22:50:07

相關問題