2012-12-17 121 views
0

我有一個正則表達式來檢查輸入的價格。價格不能是5位數字或更多,但可以包含選項的十進制數字。所以 -正則表達式檢查小數位數

  • 1000 =允許
  • 9999.99 =允許
  • 10000 =不允許
  • 100.000 =不允許

這是我到目前爲止,這是檢查數正確的小數,但不檢查小數點前的位數。我究竟做錯了什麼?

var reg = new RegExp("^(\d{0,4})+(\.[0-9]{2})?$"); 
+0

爲什麼第二次允許一個和最後一個呢? –

+1

最後一個是不允許的,因爲價格只有兩位小數,我猜。 – Pharaoh

回答

3

你有一個錯誤的量詞

var reg = new RegExp("^(\d{0,4})(\.[0-9]{2})?$"); 

只是刪除+,你的正則表達式是罰款。

看到它here on Regexr

有了這個(\d{0,4})+你重複你的第一組,這樣你就可以點之前匹配任何數字量。

你的jsfiddle工作對我來說,如果我加倍逃生

var reg = new RegExp("^\\d{0,4}(?:\\.\\d{2})?$"); 

還是不要把你的正則表達式中的字符串

var reg = new RegExp(/^(\d{0,4})(\.[0-9]{2})?$/); 
+0

正則表達式應該改爲允許「1000.1」並且不允許「」 - >'^(\ d {1,4})(\。[0-9] {1,2})?$' – Pharaoh

+0

@Pharaoh no it應該不是價格總是有兩位小數,從來沒有1. – dogbane

+0

@Pharaoh,爲什麼?我在OP的問題中看不到這個要求。 – stema