2013-02-07 139 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