【问题标题】:Regular Expression currency format正则表达式货币格式
【发布时间】:2017-06-23 10:43:09
【问题描述】:

我有一个字符串,其中包含带有文本的货币。我应该以浮点格式获取货币。

关于如何进行转换的示例

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

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

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

我正在为我的第二个正则表达式苦苦挣扎

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

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

如何使用第二个正则表达式进行逆运算?因此,与其匹配.,,不如匹配除这些之外的所有内容。

【问题讨论】:

  • 据我了解你只需要写:/([0-9]+)/g...
  • 用那个表达我失去了我的逗号
  • 你的字符串都是这种格式?
  • 我的字符串包含单词+货币符号+美国/欧洲符号的金额。没有特别的顺序
  • 为什么不使用第二个正则表达式将所有匹配的点或逗号替换为空字符串,并在第三步中将逗号替换为点?

标签: javascript regex regex-negation


【解决方案1】:

好吧,我采取了稍微不同的方法。

我认为 cmets 中的某些人误解了我,我收到的字符串可以用美国符号或欧洲符号编写。示例:

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语句是为了防止没有,.的数字像10 => 0.10一样被转换成0.value

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-30
    • 2017-12-29
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多