JavaScript中的美元金额的正则表达式

时间:2012-01-12 03:31:50

标签: javascript regex

我知道这已经完成了一千次,但我遇到了这个问题。我需要格式化美元金额的文本输入值。不应该允许逗号。只允许两位小数。 应该允许的例子:

  • 100
  • 100.10
  • $ 100
  • $ 100.25

以下是我目前不完整的正则表达式。它目前允许多个美元符号包含在任何地方(不仅仅是在开头),多个小数点包含在任何地方,以及超过两个小数位,它不应该包含在内。

<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" language="Javascript">
    $(function(){

        jQuery('.dollarAmountOnly').keyup(function () {
            this.value = this.value.replace(/[^$0-9\.]/g, '');
        });
    });
</script>
</head>
<body>
<input type="text" class="dollarAmountOnly"/>
</body>
</html>

我非常感谢帮助。谢谢!

4 个答案:

答案 0 :(得分:30)

修改

抱歉,您的问题明确要求两位小数。这就是你想要的:

var r = /^\$?[0-9]+(\.[0-9][0-9])?$/;

console.log(r.test("12.55"));  //true
console.log(r.test("$12.55"));  //true
console.log(r.test("$12"));     //true

console.log(r.test("$12."));    //false
console.log(r.test("$12.2"));    //false
console.log(r.test("$$12"));     //false
console.log(r.test("$12.555")); //false

你必须逃避你的美元符号,然后你想要小数点后的两个选项数字:

var r = /^\$?[0-9]+\.?[0-9]?[0-9]?$/;

console.log(r.test("12.55"));  //true
console.log(r.test("$12.55"));  //true
console.log(r.test("$12."));    //true
console.log(r.test("$12"));     //true

console.log(r.test("$$12"));     //false
console.log(r.test("$12.555")); //false

Fiddle

或者,为了允许小数点后的任意数字,您可以使用Kleene闭包而不是两个可选数字

var r = /^\$?[0-9]+\.?[0-9]*$/;

console.log(r.test("12.55"));  //true
console.log(r.test("$12.55"));  //true
console.log(r.test("$12."));    //true
console.log(r.test("$12"));     //true
console.log(r.test("$12.555")); //true

console.log(r.test("$$12"));     //false

答案 1 :(得分:9)

对于我们这些想要允许使用逗号的人来说,这是正则表达式:

/^\$?\d+(,\d{3})*\.?[0-9]?[0-9]?$/

如果你真的不想要它,我主张允许它并删除后端的逗号。任何使用户更容易的东西。 Jakob Nielson discusses cumbersome forms at point #7.

答案 2 :(得分:3)

我建议不要在.keyup上进行验证(即用户类型),但是当用户提交表单时。

然后,您只需验证dollarAmountOnly文本框是否与正确的正则表达式匹配,而不是替换无效字符。

有效价格的正则表达式是(这允许尾随/前导空格):

/^ *\$?\d+(?:\.\d{2})? *$/g

因此,当用户按下提交时,您会看到正则表达式是否与dollarAmountOnly匹配,如果没有,则以某种方式让用户知道。

答案 3 :(得分:1)

这是一个正则表达式我用来识别javascript中的各种货币:

 _this.currencyRegex = /^(\$|\€\£|\₪|)(?!0\.00)\d{1,3}(,\d{3})*(\.\d\d)?$/;

是一个很好的调试工具:

https://regex101.com/r/hL2pF2/26