1

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

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

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

但它允许使用诸如 £25.55 之类的符号。如何仅强制使用正确货币格式的数字?

谢谢你的帮助

4

1 回答 1

1

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

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

分解:

  • ^字符串的开始。

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

  • +一个或多个先前的实体(因此\d+意味着“一个或多个数字”)。

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

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

  • $字符串结束。

这不是非常严格。例如,它允许0000000.00. 它也不允许22.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]|$)/;

I'm not sure what you're doing with that bit at the end, especially as it seems to say (amongst other things) that you allow a single character as long as it isn't 0-9 and as long as it isn't \D. As \D means "not 0-9", it's hard to see how something could match that. (And similarly the \s and \S in there.)

于 2013-02-18T10:02:01.460 回答