我只想传递适当的货币金额,例如 22.22、465.56、1424242.88
我一直在使用这个正则表达式:
[0-9]+\.[0-9][0-9](?:[^0-9a-zA-Z\s\S\D]|$)
但它允许使用诸如 £25.55 之类的符号。如何仅强制使用正确货币格式的数字?
谢谢你的帮助
我只想传递适当的货币金额,例如 22.22、465.56、1424242.88
我一直在使用这个正则表达式:
[0-9]+\.[0-9][0-9](?:[^0-9a-zA-Z\s\S\D]|$)
但它允许使用诸如 £25.55 之类的符号。如何仅强制使用正确货币格式的数字?
谢谢你的帮助
听起来您只是没有在正则表达式上提供锚点,而且您还没有逃脱.
. 例如它应该是:
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]|$)/;
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.)