此问题已在此处有答案:
11年前关闭。
可能重复:
What's a C# regular expression that'll validate currency, float or integer?
如何在JavaScript中使用正则表达式验证货币金额?
- 小数分隔符:*
,
- 十、百等分隔符:*
.
- 图案:*
###.###.###,##
有效金额示例:
1
1234
123456
1.234
123.456
1.234.567
1,23
12345,67
1234567,89
1.234,56
123.456,78
1.234.567,89
编辑
我忘了说下面的模式也是有效的:###,###,###.##
3条答案
按热度按时间js5cn81o1#
仅根据你给出的标准,这就是我的想法。
/(?:^\d{1,3}(?:\.?\d{3})*(?:,\d{2})?$)|(?:^\d{1,3}(?:,?\d{3})*(?:\.\d{2})?$)/
Demo
这是丑陋的,它只会变得更糟,因为你发现更多的情况下,需要匹配。您最好找到并使用一些验证库,而不是尝试自己完成所有这些工作,尤其是在单个正则表达式中。
它将匹配
123.123,123
(三个尾随数字而不是两个),因为它将接受逗号或句点作为千位和小数点分隔符。为了解决这个问题,我现在基本上把表达式加倍了;它要么用逗号作为分隔符,用句点作为小数点来匹配整个内容,要么用句点作为分隔符,用逗号作为小数点来匹配整个内容。明白我的意思了吧?(^_^)
下面是详细的解释:
有一件事让它看起来更复杂,那就是里面所有的
?:
。通常,正则表达式也会捕获(返回匹配)所有的子模式。?:
所做的就是不去捕获子模式。所以从技术上讲,如果你把所有的?:
都取出来,完整的东西仍然会匹配整个字符串,这看起来更清晰一些:/(^\d{1,3}(\.?\d{3})*(,\d{2})?$)|(^\d{1,3}(,?\d{3})*(\.\d{2})?$)/
regular-expressions.info也是一个很好的资源。
iovurdzv2#
这适用于您的所有示例:
作为一个冗长的正则表达式(但在JavaScript中不支持):
sycxhyv73#
这将处理上面的所有内容,除了(刚刚添加的)。)123.45箱:
您需要处理多种分隔符格式吗?