比Globalize.currencyParser更好的解决方案?

时间:2016-04-05 14:22:00

标签: jquery jquery-globalize

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

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的解决方案。想法?

2 个答案:

答案 0 :(得分:0)

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

与此同时,遗憾的是除了使用黑客之外没什么可做的。一种方法是从String中修剪欧元货币,然后解析结果数字。

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

```

答案 1 :(得分: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”语言环境,有几种货币