2016-04-24 77 views
0

我試過了幾個我自己的正則表達式,但總是有一些錯誤或其他。正則表達式在JAVA中用千位分隔符8.2位小數

我的要求是得到8,2十進制的正則表達式,例如, 000,000.00

  • 6位整數部分
  • 2個位數小數部分

無效的有如下

  • 2,2-
  • 2,2.2.2
  • 12,12
  • 1,1,1,1

有效的有如下

  • 1,000.00
  • 220,000.00

更新: 這從用戶檢查有效的輸入。 小數部分或逗號不是強制性的。

+1

您應使用的DecimalFormat格式化數字 – Sanjeev

+0

@ rock321987感謝格式化。 – user1782556

+0

看到答案..這可以嗎? – rock321987

回答

2

至多8位之前小數

我想出了一個相當複雜的正則表達式(假設數字具有強制性,

^\d{1,3}((?:(?<=\d),(?=\d{3})\d{3})){0,2}(\.\d{2})?$ 

Regex Demo

你可以在上面的正則表達式中添加一個或一個條件來匹配非逗號模式

^(\d{1,3}((?:(?<=\d),(?=\d{3})\d{3})){0,2}|^\d{0,8})(\.\d{2})?$ 

Java的正則表達式

^(\\d{1,3}((?:(?<=\\d),(?=\\d{3})\\d{3})){0,2}|\\d{0,8})(\\.\\d{2})?$ 

Ideone Demo

持續至多6前位十進制使用

^(\d{1,3}((?:(?<=\d),(?=\d{3})\d{3})){0,1}|^\d{0,6})(\.\d{2})?$ 
+0

它不應該捕獲'222,000,000,123.00'嗎? –

+0

@TamasHegedus直到我對問題的理解,在小數前應該有最多8位數和小數後有2位數 – rock321987

+2

嗯,這就是'8,2'的意思。我想你是對的。 –

1

試試這個正則表達式:

/^(?:(?:0|[1-9][0-9]{0,2})(?:,[0-9]{3})*(?:\.(?:[0-9]{3},)*[0-9]{1,3})?|[1-9][0-9]*(?:\.[0-9]*)?)$/ 

See in regex101