2012-01-03 84 views
1

分開後,我已經創建一個正則表達式與此規則:正則表達式的百分比由逗號

  1. 號碼是5-100之間
  2. 數之間用逗號(55,70,90)
  3. 號碼分開在串

獨特例如:

  • 10,20,50 OK
  • 10,20,50號(空格)
  • 10,20,50,NO(最後一個逗號)
  • 10,10,20號(唯一的)

你能幫助我嗎?

+3

你能告訴我們你已經嘗試什麼,以及爲什麼它已經失敗了? – leonbloy 2012-01-03 15:02:24

+0

好吧,數字在5到100之間,數字之間用逗號分隔是可能的,但重複數字的事情遠遠超出了我認爲的正則表達式的可能性。 – hochl 2012-01-03 15:08:36

+3

這是功課嗎?它是否必須完全作爲正則表達式來實現,還是可以使用一些Java代碼? – 2012-01-03 15:09:52

回答

1

雖然有可能用正則表達式進行所有檢查,我認爲這不是對工作的工具。

我想:

  • 使用正則表達式驗證字符串是隻有數字和逗號:^(?:[0-9]+,)*[0-9]+$
  • 使用split(',', $input)變成陣列
  • 遍歷數組,並確保數字是5 - 100之間, (算術比較)並且沒有重複(數組比較)。
+0

我試過用String input =「40,50,80」; \t \t字符串圖案= 「/^[0-9,] + $ /」; \t \t Pattern p = Pattern.compile(pattern); \t \t匹配器M = p.matcher(輸入); \t \t的System.out.println(m.matches());但返回總是假的! – CeccoCQ 2012-01-03 16:01:29

+0

+1此解決方案簡單易懂。我會改進正則表達式來使它成爲數字和逗號,如'^(?:[0-9] +,)* [0-9] + $'。 – hochl 2012-01-03 16:02:04

+0

@ hochl,我更新了正則表達式。 – 2012-01-03 16:54:25

2

這不是正則表達式工作,因爲你有

  1. 項目列表中的可變數量的數字
  2. 限制(> 5,< 100),這通常是很難用正則表達來表示。

爲此,您可以簡單地用String#split()

String arr[] = s.split(","); 
for (int i=0; i<s.length; i++) { 
    // apply your rules here 
} 
+0

正則表達式可以用於驗證。你假設輸入是一個有效的格式,根據OP是不是。 – 2012-01-03 16:56:04

0

用於解決問題10和99,或100之間1)

(?:[5-9]|[1-9][0-9]|100)(?![0-9]) 

號要麼是5和9之間, ,之後沒有數字。