使用正则表达式JavaScript格式化数字

时间:2014-02-25 01:38:31

标签: javascript regex

我正在尝试将一个数字格式化为巴西货币,但我不确定会出现什么问题。

function format2(n, currency) {
    return currency + " " + n.toFixed(2).replace(^\s*(?:[1-9]\d{0,2}(?:\.\d{3})*|0)(?:,\d{1,2})?$/g, "$1,");
}

2 个答案:

答案 0 :(得分:1)

Taken from the comments: “but its giving me a syntax error..”

你缺少一个斜杠来定义一个正则表达式文字。将您的退货声明更改为

return currency + " " + n.toFixed(2).replace(/^\s*(?:[1-9]\d{0,2}(?:\.\d{3})*|0)(?:,\d{1,2})?$/g, "$1,");
                                             ^ Teda, the magic opening slash!

顺便说一句,你的正则表达式过于复杂IMO并且格式不正确。我只需要/\./g来获取匹配的句点,因此您的替换语句看起来像.replace(/\./g, ",");

Demo

答案 1 :(得分:0)

我不知道你为什么如此热衷于使用正则表达式。以下循环解决方案应该没问题,并提供更通用的解决方案:

function formatNumber(num, places, thou, point) {
  var result = [];
  num = Number(num).toFixed(places).split('.');
  var m = num[0];

  for (var s=m.length%3, i=s?0:1, iLen=m.length/3|0; i<=iLen; i++) {
    result.push(m.substr(i? (i-1)*3+s : 0, i? 3 : s));
  }
  return result.join(thou) + point + num[1];
}

console.log('R$ ' + formatNumber(12345678.155, 2, '.', ',')); // R$ 12.345.678,16
console.log('R$ ' + formatNumber(12.155, 2, '.', ','));       // R$ 12,16