正则表达式货币格式

时间:2017-06-23 10:43:10

标签: javascript regex regex-negation

我有一个包含带文字货币的字符串。我应该以浮动格式获得货币。

转换应如何运作的示例

Cash € 1,00          => 1.00
Cash € 10,00         => 10.00
Cash $ 10.00         => 10.00
Maestro € 1,0000     => 1.0000
Visa € 1.000,00      => 1000.00
Cash € 1.000.000,00  => 1000000.00
Cash $ 1,000,000.00  => 1000000.00

现在我分2步完成。第一个表达式仅过滤掉0-9 .,

var regex = /(\d|\.|,)/g
value = value.match(regex).join('');

我正在努力学习第二个正则表达式

var regex2 = /(\.|,)(?=.*(\.|,))/g;

这个匹配除了最后一个之外的每个点或逗号。

如何使用第二个正则表达式进行逆向?因此,不是匹配.,,而是匹配其他所有内容。

1 个答案:

答案 0 :(得分:0)

好吧,我对它采取了略微不同的方法。

我认为评论中有些人误解了我,我收到的字符串可以用美国符号或欧洲符号书写。例如:

American: 1,345.20 = European 1.345,20

,.可以用作千位分隔符或小数点分隔符

我接受所有数字组,然后加入它们,除了最后一个。然后我在它们之间放了一个点,并将最后一个添加到我的浮动中。

var regex = /([0-9]+)/g;
var arrValues = value.match(regex);
if(arrValues.length == 1) value.push(0);
var newValue = parseFloat(_.initial(arrValues).join('') + '.' + _.last(arrValues));

if语句是为了防止没有,.的号码转换为0.value,如10 => 0.10

旁注:我使用lodash来做一些事情。