【发布时间】:2014-09-16 08:32:25
【问题描述】:
我有以下格式,可以接受
1200000,00
1200000.00
1,200,000.00
1 200 000.00
1 200 000,00
1 200 000,0000
-1 200 000.00
目前我只能验证^-?\\d+$、^-?\\d+[\\,\\.]\\d{2}$、^-?\\d+[\\,\\.]\\d{2,}$。最后两种格式是分开的,所以我知道是否需要舍入。这三种格式都使用gm 标志来检查从^ 开始到$ 结束的字符串。
那些正则表达式仅涵盖列表中的前两个元素。尚未验证使用逗号和空格进行千位分隔的其他元素,我不确定如何实现。
还有一个“美化”表达式(\\d)(?=(\\d{3})+(?!\\d)),它将把这个1200000,00转换成1 200 000,00,这样用法'1200000,00'.replace(('(\\d)(?=(\\d{3})+(?!\\d))', 'g'), '$1 ')。
所以问题是,验证这种格式1 200 000.00 或1,200,000.00 的正确正则表达式是什么?因为我假设与\s\, 的区别可以很容易地用同一个表达式来完成。
谢谢。
【问题讨论】:
-
如何强制使用一种一致的格式,而不是编写过于复杂的逻辑来允许所有这些?
-
这些是要求,我无法更改。
-
我为此使用了 numeric.js
-
@johnSmith 这是一个很好的库(我假设),但它是用于应用正确的格式,而不是验证给定的。当然可能会有一个像
startValue.apply(format) === startValue这样的hack,它可以告诉我们过去是否正确的格式,但它是一个hack IMO。
标签: javascript regex currency