Javascript正则表达式货币

时间:2013-02-18 09:57:18

标签: javascript regex

我想只传递适当的货币金额,如22.22,465.56,1424242.88

我一直在使用这个正则表达式:

[0-9]+\.[0-9][0-9](?:[^0-9a-zA-Z\s\S\D]|$)

但它允许符号如25.55英镑。如何才能强制使用正确的货币格式?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

听起来你还没有在正则表达式上提供锚点,而你还没有逃过.。例如。它应该是:

var currencyNumbersOnly = /^\d+\.\d{2}$/;

故障:

  • ^字符串的开头。

  • \d一个数字(0-9)。

  • +上一个实体中的一个或多个(以及\d+表示“一个或多个数字”)。

  • \.一个小数字小数点。请注意,某些文化使用,而不是.

  • \d{2}正好两位数。

  • $字符串结束。

这不是超严谨的。例如,它允许0000000.00。它也不允许2(需要2.00)。还要注意,即使在谈论货币数字时,我们并不总是只有数百个。例如,银行汇率可能会持续到小数点右侧的几个地方。 (例如,xe.com现在说,1美元= 0.646065英镑)。

正如杰克在对问题的评论中指出的那样,您可能希望允许使用负数,因此在-?之后将-(0或1 ^个字符放入其中可能是合适的:

var currencyNumbersOnly = /^-?\d+\.\d{2}$/;

更新:现在我可以看到您的完整正则表达式,您可能需要:

var currencyNumbersOnly = /^\d+\.\d{2}(?:[^0-9a-zA-Z\s\S\D]|$)/;

我不确定你最后在做什么,特别是因为似乎说(除其他事项外)你允许一个角色,只要它不是' t 0-9 ,只要它不是\D。由于\D表示“不是0-9”,因此很难看出某些内容与之匹配。 (同样地,\s\S在那里。)