2012-11-03 71 views
3

我需要使用JavaScript驗證數字字符串,以確保數字具有精確的兩位小數。在小數點後強制執行2位數的正則表達式

驗證將通過僅當

  1. 數量有精確的小數點後兩位
  2. 有小數點前至少一個數字。 (可能爲零)
  3. 小數點前的數字不能以多於一個零開始。

有效數字:

0.01 
0.12 
111.23 
1234.56 
.67 
123.00 
0.00 

無效號碼:

.12 
1.1 
0.0 
00.00 
1234. 
1234.567 
1234 
00123.45 
abcd.12 
12a4.56 
1234.5A 

我已經試過正則表達式[0-9][\.][0-9][0-9]$,但它允許小數點像12a4.56前的字母。

回答

4

.匹配任何字符,它不會做什麼,你認爲它。你必須逃避它。另外,你還有兩個錯誤;嘗試

^[0-9]+\.[0-9][0-9]$ 

代替,甚至更好,使用\d爲十進制數字:

^\d+\.\d\d$ 
+0

嗨H2C03,你的表情接受.12,.34等不應該傳遞的內容。 –

+0

@ManasSaha啊,所以你想在小數點前至少有一個數字。這個給你。 – 2012-11-03 10:46:57

+0

這個完美的作品!謝謝一噸:-) –

3

您不需要正則表達式。

JavaScript有一個功能toFixed(),可以做你所需要的。

var fixedtotwodecimals = floatvalue.toFixed(2); 
+0

我相信OP想驗證用戶輸入(我。即一個布爾值),如果它無效,則不正確/修復它。 – 2012-11-03 10:43:02

+1

是...所以將原始值與toFixed值進行比較。你仍然不需要正則表達式。 – Spudley

+0

+1用於提示有效的選擇。 – phant0m

0
var values='0.12'; 

document.write(values.match(/\d+[.]+\d+\d/)); 

變化值,只要你想,並檢查它

+0

檢查這個http://jsfiddle.net/p6EaG/ –

0

這就是:

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

這是錯誤的,它匹配例如'0.110.11'。你錯過了括號,在'|'錯誤之後的'^''[。] +'不應該有'+'。 – phant0m

4

This covers all requirements

^(0|0?[1-9]\d*)\.\d\d$ 
  • 數量有精確的小數點後兩位
    • 中平凡滿足,因爲非可選\.\d\d$

其他兩個條件可如下重述:

  • 小數點前的數字是一個零
  • 或數恰好與一個零,然後一個數字,做

開始這是覆蓋在這兩種情況下:

  • 0
  • 0?[1-9]\d*
相關問題