我想只传递适当的货币金额,如22.22,465.56,1424242.88
我一直在使用这个正则表达式:
[0-9]+\.[0-9][0-9](?:[^0-9a-zA-Z\s\S\D]|$)
但它允许符号如25.55英镑。如何才能强制使用正确的货币格式?
感谢您的帮助
答案 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
在那里。)