2012-10-03 18 views
3

我需要一個正則表達式滿足這些規則:定期3小數點表達

  1. 小數點的最大數目是3,但沒有小數點的數字(例如12)也應該被接受
  2. 值必須至少爲0
  3. 值必須小於或等於99999999999.999
  4. 小數點DOT(例如2.5,不2,5)

樣品有效的數字:

0 
2 
0.4 
78784764.23 
45.232 

無效的數字樣本:

-2 
123456789522144 
84.2564 

我發現一個例子這裏(http://forums.asp.net/t/1642501.aspx ),並設法稍微修改它,使0作爲最小值,99999999999.999作爲最大值,並僅接受DOT作爲小數點。這裏是我修改後的正則表達式:

^\-?(([0-9]\d?|0\d{1,2})((\.)\d{0,2})?|99999999999.999((\.)0{1,2})?)$ 

但是,我仍然有3小數點的問題,它是相當不穩定。任何人都可以幫助我,因爲在正則表達式中,我基本上是文盲。

謝謝。

編輯: 我使用ASP正則表達式驗證

+1

你爲什麼允許負如果最小值是0,請簽名? –

+0

我不打算允許減號,但由於用戶將在文本框中輸入輸入,因此用戶可能會嘗試輸入負值(以及非數值)。 – ixora

回答

14

這並不難:

^[0-9]{1,11}(?:\.[0-9]{1,3})?$ 

說明:

^   # Start of string 
[0-9]{1,11} # Match 1-11 digits (i. e. 0-99999999999) 
(?:   # Try to match... 
\.   # a decimal point 
[0-9]{1,3} # followed by one to three digits (i. e. 0-999) 
)?   # ...optionally 
$   # End of string 
+0

謝謝你的回覆。我很抱歉,但似乎沒有工作。我測試了這個值,54.866,驗證失敗。當值爲100或更高時它也失敗。它適用於這些值:58,1.2,1.23雖然 – ixora

+2

這個正則表達式[絕對有效](https://gist.github.com/3826240)與'54.866'在這裏。 – memowe

+2

@ixora:Tim的正則表達式完美運作。這是你問題中的正則表達式,不符合你描述的方式。順便說一句,你適應的正則表達式如此複雜的原因是因爲原始不允許前導零,它*允許減號(兩者都不符合所述要求)並且它必須匹配'200'或'200.00 '但不是'200.01'或'200.99'。你的情況要簡單得多。 –