Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式JavaScript格式化数字_Javascript_Regex - Fatal编程技术网

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

使用正则表达式JavaScript格式化数字,javascript,regex,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,"); } 您缺少用于定义正则表达式文字的斜杠。将您的返回声明更改为 return currency + " " + n.toFixed(2).replace(/^

我正试图将一个数字格式化为巴西货币,但我不确定出了什么问题

function format2(n, currency) {
    return currency + " " + n.toFixed(2).replace(^\s*(?:[1-9]\d{0,2}(?:\.\d{3})*|0)(?:,\d{1,2})?$/g, "$1,");
}
您缺少用于定义正则表达式文字的斜杠。将您的返回声明更改为

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!
顺便说一句,你的正则表达式在我看来太复杂了,格式不正确。我只需要执行
/\./g
来获得匹配的句点,因此您的replace语句看起来像
.replace(/\./g,,”)


我不知道您为什么如此热衷于使用正则表达式来实现这一点。以下循环解决方案应该很好,并提供了更通用的解决方案:

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
函数formatNumber(num、places、thou、point){
var结果=[];
num=Number(num).toFixed(places).split('.');
var m=num[0];

对于(var s=m.length%3,i=s?0:1,iLen=m.length/3 | 0;您能给出示例输入/输出吗?R$123.456.789,10应该是这样的..我读到这个正则表达式可以工作,但它给了我一个语法错误..给出您实际传递给
format2()的示例
no..那是2500.00,我问的是250.00不,你没有正确阅读线索。a)评分最高的答案明确说明了如何按照你的方式进行。b)将一些脑细胞摩擦在一起,并对任何答案进行调整(提示:交换代码中的
)但它的格式并不像它应该的那样…R$1.234,00@GilbertoGonçalvesMachado什么是
,00
?应该在什么时候发生?我对巴西货币的格式不太了解,我明白了..这解决了这个问题..但现在我有另一个问题,那就是没有格式化数字..@GilbertoGonçalvesMachado请解释一下你所说的
,00是美分..格式为:R$1,23..R$12,34..R$1.234,56…R$123.456,78
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