2011-10-10 65 views
0

我正在修改正則表達式驗證控件。 此刻正則表達式如下:Modyfying正則表達式來限制數字範圍

(\d*\,?\d{2}?){1}$ 

至於我能理解它允許與2位小數的數字。

我需要修改它:

  • 數必須介於0 - 1.000.000。 (從零到一百萬)。
  • 該數字可能有或沒有2位小數。
  • 該值不能爲負值。
  • 逗號(,)是小數點分隔符。
  • 不應該允許任何千分隔符。
+2

這是不是一個很好的(甚至是正確的)正則表達式。我寧願重寫它,也不願修改它。您確定要使用逗號作爲小數點分隔符嗎?你想允許(或甚至要求)點數千分隔符? –

+0

數字「可以」有或必須有2位小數? –

+0

哪一點證明有問題?你看過任何「相關」的帖子嗎?這不是StackOverflow的新問題! – Johnsyweb

回答

0

這個怎麼樣

^(?:\d{1,6}(?:\,\d{2})?|1000000)$ 

查看它here on Regexr

它接受1個6位,並用2位OR 「1000000」 的可選部分之間。

它允許數字從零開始! (001將被接受)

^錨正則表達式到字符串的開始

$錨正則表達式到字符串

(?:)的端部是一個非捕獲組

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

試試這個正則表達式:

^(((0|[1-9]\d{0,5})(\,\d{2})?)|(1000000(\,00)?))$ 

它接受如下數字:"4", "4,23", "123456", "1000000", "1000000,00", 但不接受:",23", "4,7", "1000001", "4,234", "1000000,55"

如果你想正是兩位小數只接受號碼,使用這個表達式:

+0

@Tim,是的,我注意到你後面的這5秒:)更正了 –

+0

現在是可選的。但老wersion也工作(它使用替代'|'沒有任何'?') –

+0

哦,我明白了。我忽略了管道角色。但現在好多了。最後一個問題:這個正則表達式允許'1000000.99',這可能是或不是所希望的。可能不是,但仍然是+1。 –