1

我正在为 jQuery 使用 Globalize,并且正在寻找一种将带货币的数字转换为不带货币符号的数字的解决方案。

Globalize 有一个函数 Globalize.currencyParser,但v1.1.1它仍然是空的,所以我尝试用

Globalize(“fr”).numberParser()(“-10 000,99 €”)

但它变成了10000,99而不是-10000,99

在函数 numberParse

if ( prefix === negativePrefix && suffix === negativeSuffix ) { number *= -1; }

该数字不会转换为负数,因为后缀!==negativeSuffix。所以,我决定用正则表达式解决我的问题

( /^([^0-9]*)(([0-9,\'\٬\.\s]*[0-9]+)(,٫\.[0-9]+)?)([^0-9]*)$/ )

但我更喜欢 Globalize.currencyParser 的解决方案。想法?

4

2 回答 2

0

理想的解决方案是使用.currencyParser(),但 Globalize 尚未实现:#364(空 fn 绝对是一个错误)。如果你想贡献解析器,我会欢迎它,我可以将它合并到库中。

与此同时,不幸的是,除了使用 hacks 之外别无他法。一种是从字符串中删除欧元货币,然后解析结果数字。

// Ugly hack 
Globalize('fr').parseNumber('-1 000 000,00 €'.replace(/€/, '').trim())
// > -1000000 

```

于 2016-04-05T14:45:50.823 回答
0

我在我的 .js 文件中写了一个小函数

function getNumberAndCurrency(number_with_currency) {
  var numberNumberRe = ( /^([^0-9]*)(([0-9,\'\٬\.\s]*[0-9]+)(,٫\.[0-9]+)?)([^0-9]*)$/ );
  var match_array = numberNumberRe.exec(number_with_currency);

  if ('' == match_array[5]) {
    if ('-' == match_array[1].charAt(0)) {
      var currency = match_array[1].slice(1);
      var number = '-' + match_array[2];
    } else {
      var currency = match_array[1];
      var number = match_array[2];
    }
  } else {
    var currency = match_array[5];
    var number = match_array[1] + match_array[2];
  }

  return [number, currency];
}

这在 "en"、"de" 和 "fr" 语言环境中使用多种货币可以正常工作

于 2016-04-05T15:21:03.840 回答