2013-08-26 65 views
2

如何編寫一個正則表達式來驗證只應包含十進制值的輸入文本框?該值可以具有最多3位小數(但也不包含),逗號作爲分隔符。十進制數的正則表達式(以逗號分隔的最多三個十進制數)

例如,下面給出的這些值是有效的: -

 
1,234 
1,23 
1,2 
1 

這些都不是有效的:

 
1,2345 (too many decimal numbers) 
A (a letter is not a number) 
    (a space or string empty) 
1.234 (used a dot instead of a comma) 
+4

爲'1千萬, '有效? –

+0

對於這個問題,',1'是否有效? – Tory

回答

2

如何@"\d+,?\d{0,3}":1個或更大的數字,然後可選逗號,然後0再增加3位數字。這假設您允許逗號前的任意數字。在你的例子中,你只有一個,在這種情況下,你會想要刪除+

如果該值1,是無效的,你必須在?移動到結束:@"\d+(,\d{1,3})?"

+0

謝謝Gabe。 – Ciupaz

+0

這似乎與'1'匹配,我認爲這是一個錯誤。 – pguardiario

+0

@pguardiario:OP沒有回答這個問題。這是可能的,它是有效的。 – Gabe

2

你可以使用這樣的模式:

[0-9]+(,[0-9]{1,3})? 
+1

謝謝,可能是一個解決方案。 L – Ciupaz

+1

我喜歡這個,對於正則表達式的初學者來說,這個解決方案是最直接的。 – AutomatedChaos

7

嘗試是這樣的:

\d+(?:,\d{1,3})? 

解釋: -

\d+  # multiple digits 
(?:  # start non-capturing group 
    ,  # a comma 
    \d{1,3} # 1-3 digits 
)?   # end non-capturing group, made optional 
+1

+1這是正確的答案,但非捕獲組真的只是增加了不必要的複雜因素IMO – pguardiario

1

注意,如果你只想要一個字符的小數點前,取出+

^\d+(,(\d?){3})?$ 


^ //start 
\d+ //one or more decimal digits 
(,(\d?){3})? //a comma, followed by up to 3 decimal digits, optionally 
$ //end 

如果你不想1,被接受,那麼,中間部分可以(,\d(\d?){2})?

+0

錨點是一個非常好的主意。 –

+0

這個答案有太多'?'的 – pguardiario

+0

@pguardiario我很確定它不會......我測試它非常徹底。你是否?這個?在第二個條款中,每個3位小數都是可選的,這樣的ajar不需要{1,3} – vroomfondel