2013-02-07 287 views
0

我想限制用戶在primefaces輸入文本中輸入無效金額。運行時已知最大整數和分數位數長度。我正在使用JavaScript正則表達式來實現這一點。正則表達式限制貨幣的長度和模式

var pattern =/^\d{0,3}?[\.]?\d{1,3}$/; 
    if (pattern.test(amount)) { 
     return true; 
    }else { 
     console.log('rgx Failed'); 
     return false; 
    } 

對於這個例子,我正在考慮3作爲最大整數和分數長度。
整數部分可以是長度爲0到3,小數部分應該是至少一個數字和最大值3. 但上述javascript不起作用,它允許整數部分中包含7個數字。

我正在使用inputText onKeyDown事件調用此腳本,以便我可以檢查每個按鍵並限制只輸入有效金額。

有效金額的:123.123,12.1,1.12,0.123,1.3,0.1234等 無效量的:123,1234等

+0

忘記了結束符在正則表達式,導致語法錯誤 –

+0

我重申我的要求:用戶只能輸入整數部分,在這種情況下,十進制後的小數和零應自動出現,用戶也可以只輸入小數部分, .34),在這種情況下,0.34應該會自動出現 –

回答

0

我用primefaces的擴展inputNumber組件,滿足我的所有要求和條件。

包括maxValue = 9999.999" />

Inputnumber接受,在整數部分4digits和3位數在小數部分。格式化和附加零由組件本身處理。

2

一個快速的解決辦法是:

/^\d{0,3}\.\d{1,3}$/ 

要匹配更新的要求:

pattern.replace(/^(\d{0,3})\.?(\d{0,3})$/, function(m, g1,g2) { 
    return (g1 || 0) + '.' + (g2 || 0); 
}) 

將作爲輸入被限定在6個數字和一個可選的小數位

只要工作
+0

我想它會失敗.1234 – Piyuesh

+0

有了這個正則表達式,我可以在整數部分只輸入一個數字。 –

+0

我重申我的要求:用戶只能輸入整數部分,在這種情況下,十進制後的小數和零應自動出現。用戶也可以只輸入小數部分,通過鍵入小數點後面加上一些小數位(比如.34),在這種情況下,0.34會自動出現 –

0

關於什麼:

/^(\d{1,3}\.\d{1,3})|(\.\d{1,3})|(\d{1,3})$/

這是不乾淨的,但它的工作原理。

+1

使用上述regx後,它接受整數和小數部分的任何數字。 –

0

試試這個....(^ \ d {1,3}(\ d {1,3})[])$ |(^ \ d {0,3} $)

更好的人會使用前瞻?=或負向前瞻?!

感謝

+0

使用上面提到的regx後,它接受整數和小數部分的任何數字。 –

+0

我剛剛在http://regexpal.com/上嘗試過。它工作正常。 – Piyuesh

+0

是的,你是對的。我現在增加了$以上的嘗試。 – Piyuesh