我試圖將數字格式化爲巴西貨幣,但我不確定發生了什麼問題。使用正則表達式格式化數字
function format2(n, currency) {
return currency + " " + n.toFixed(2).replace(^\s*(?:[1-9]\d{0,2}(?:\.\d{3})*|0)(?:,\d{1,2})?$/g, "$1,");
}
我試圖將數字格式化爲巴西貨幣,但我不確定發生了什麼問題。使用正則表達式格式化數字
function format2(n, currency) {
return currency + " " + n.toFixed(2).replace(^\s*(?:[1-9]\d{0,2}(?:\.\d{3})*|0)(?:,\d{1,2})?$/g, "$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語句看起來像.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
您可以提供樣本輸入/輸出嗎? –
R $ 123.456.789,10多數民衆贊成如此它應該是..我讀這個正則表達式會工作,但它給我一個語法錯誤.. – ledesma
舉例說明你實際傳遞給'format2()' –