2011-09-16 33 views
1

對於包含0到99999之間的數字的字符串的正則表達式,我們遇到了麻煩,後面跟着一個加號,後跟一個或兩個數字,後面緊跟着一個數字十進制和一個數字。例如:包含加號和小數的正則表達式

99999+99.9 

這也將是有效的:

0+00 

這也將是有效的:

0+02.5 

這也將是有效的:

0+2.5 

我找到這個話題:How can I check for a plus sign using regular expressions?

這一個: Regular Expression for decimal numbers

但我無法把2一起和滿足上面列出的其他要求。

任何幫助,您可以提供非常感謝!

+0

像'000 + 12.5'這樣的零填充數字是否有效? – BoltClock

+0

是的,零填充是可以的 –

回答

4

這應該工作:

\d{1,5}\+\d{1,2}(?:\.\d)? 
  1. \d{1,5}捕捉0和99999之間的任何東西,但也允許零填充,例如0000000123(如果你不想零填充,它會更復雜一點)。

  2. \+符合加號。

  3. \d{1,2}匹配一個或兩個數字。

  4. (?:\.\d)匹配一個數字後跟一個數字。 (?:)位指示非捕獲組。

  5. ?最後使非捕獲組成爲可選。

+0

唯一的問題是它允許非數字字符。 (即99b99 + 99.9因「b」而不應有效)。 –

0

這是

"^[0-9]*([0-9]{0,5}\+[0-9]{1,2}(\.[0-9])?)[0-9]*$" 

編輯:根據你評論,我已經修改了表達。

+0

我應該在我的問題中更清楚。非數字字符不應該是有效的。 –

+0

您提出的解決方案可防止非數字字符 - 但是,它允許在加號左側放置超過5個字符。任何方式來執行加號左側的最多5個字符? –

+0

實際上,它不強制加號左邊的5個字符,加號右邊的2個字符或者小數點右邊的2個字符(如果提供了十進制)。 –

0

你需要逃避加和。 - 像這樣

\d{1,5}\+\d{1,2}\.?\d 

Hth!