正则表达式货币格式 - JavaScript

4

我目前在html输入表单字段中使用以下正则表达式来验证货币:

/[1-9]\d*(?:\.\d{0,2})?/

然而,它允许通过以下值:13000.234.12

这不是一个有效的值。以下是我想要允许通过的有效值:

有效的

125
1.25
1000.15
700.1
80.45
0.25

无效的

130.1.4
21.......14

感觉应该有一个标准的正则表达式模式可供使用,您怎么看?

顺便说一句:通过事件键监听器,我已经防止了字母数字和美元符号的输入,因此这个问题会变得更容易。


1
如果您正在使用正则表达式来验证输入,则无需使用键事件侦听器。只有在用户完成输入字符后才需要验证输入,此时您真的不关心值是什么(例如,用户可能会从其他地方复制并粘贴,然后编辑他们粘贴的内容)。 - RobG
3个回答

12

像这样应该可以工作:

^(\d*\.\d{1,2}|\d+)$

它匹配:

1.00
1
0.23
0.2
.2

它不匹配:

.
1.1.

3
你不需要使用 ^$ 来确保末尾没有垃圾。 - jfriend00
使用"d{0,2}"允许像"1."这样的值。 - JohnH

1
我使用逗号作为小数分隔符。这是我的朋友们:
^([0]?(,\d{1,2})?|([1-9]{1,3})?((\.\d{3})*|([1-9])*)?(,\d{1,2})?)?$

1
/^(\d*?)(\.\d{1,2})?$/

所以它是(开始)(任意数量的仅限数字,甚至可以是零),(。然后是仅限数字,一个或两个,但不一定要有)结束


这不也会匹配空字符串吗? - Blender
可以这样做,但它也允许更常见的输入,如0.25或1.2,而不是强制要求从0开始。你有任何建议吗?我怎样才能在保持灵活性的同时强制实施最小字符限制? - Gareth Parker
基本上只有两种模式(1.0.0)需要注意,因此我不得不将正则表达式分解成两个基本上由 | 分隔的不同正则表达式模式。 - Blender
啊,我明白了,那是一个相当好的方法。我没有想到过。我需要更经常地熟悉正则表达式。 - Gareth Parker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接