2012-02-13 89 views
0

我试图验证货币具有以下功能:验证货币在JavaScript

function checkwages(input){ 
    var validformat=/^\d{0,5}(\.\d{1,2})?$/; 
    if (validformat.test(input)) { 
     // alert("$:"+ input + " test"); 
     return true; 
    } 
    return false; 
} 

我们的目标是确保用户输入数字或十进制格式。它不能为0或负数。但是,当输入字段为空时,此格式中的0位有效将失败。但是,如果我将其更改为/^\d{1,5}(\.\d{1,2})?$/,那么.21将变为无效并强制用户输入类似0.21的内容。我如何改变正则表达式,以至于.21被认为是有效的数字?

感谢

+0

JavaScript正则表达式接受预见吗?如果没有,你只能使用一个正则表达式。 – m0skit0 2012-02-13 19:06:43

+0

有一种方法可以修改正则表达式来考虑这个OR,我只是找不到正确的方法。我所有的试验都失败了,但是我确信有一种方法可以用一个正则表达式来执行 – Kiran 2012-02-13 19:14:56

+0

您没有回答我的问题。无论如何,如果我理解正确,你希望它接受一个没有小数点的数字(例如2345),带小数点(234.56),但也是.XX,是正确的吗? – m0skit0 2012-02-13 19:28:47

回答

1
/^(?=.*[1-9])\d{0,5}(\.\d{1,2})?$/ 

位开始时在字符串中的任何位置查找非零值,但不捕获它。

+0

这只是工程.. – Kiran 2012-02-13 20:19:56

+0

它的魔力! :) – 2012-02-13 20:24:03

-2

没有办法证明用正则表达式输入是大于0。但是,这是你的条件之一(“它不能为0”)。所以即使你的第二个RegEx用户可以输入0或0.0,这将被评估为真。

我的建议是,你用你的第一个正则表达式,并用这个简单的对比结合起来:

if (validformat.test(input) && input.length > 0 && input > 0) 

然后验证应满足您的所有需求,这是非常简单的(动态类型FTW)。

+0

不行,不行。他再次阅读他的问题,他解释了为什么;) – m0skit0 2012-02-13 19:42:02

+0

是的,我忘记了空白的输入。但这不是一个真正的问题。只需添加“input.length> 0”即可。我编辑了我的答案,以便它现在应该是正确的。 – styrr 2012-02-13 19:52:02

+0

顺便说一句''> 0返回false。所以input.length> 0是没有必要的。 – styrr 2012-02-13 19:58:15