我想用 Intl 的 NumberFormat 格式化货币,并在符号和数字之间用空格 " " 获取返回值。
new Intl.NumberFormat('pt-br', { style: 'currency', currency: 'USD' }).format(12345)
// "US$12.345,00"
new Intl.NumberFormat('pt-br', { style: 'currency', currency: 'BRL' }).format(12345)
// "R$12.345,00"
我想要什么: "US$ 12.345,00", "R$ 12.345,00">
有什么想法吗?
您可以使用replace
来进一步设置货币格式。
var usd = new Intl.NumberFormat('pt-br', { style: 'currency', currency: 'USD' }).format(12345).replace(/^(D+)/, '$1 ');
var euro = new Intl.NumberFormat('pt-br', { style: 'currency', currency: 'EUR' }).format(12345).replace(/^(D+)/, '$1 ');
var deEuro = new Intl.NumberFormat('de', { style: 'currency', currency: 'EUR' }).format(12345).replace(/^(D+)/, '$1 ');
console.log(usd);
console.log(euro);
console.log(deEuro);
更新
Intl 目前存在一个问题.js某些浏览器在货币和值之间放置了一个空格,从而产生了 OP 想要的输出。在这种情况下,上面的格式将导致 2 个空格(如下面的注释所示(。
您可以添加.replace(/s+/g, ' ')
以将多个空格替换为单个空格。这将确保如果浏览器由于上述问题添加了空格,则最终输出仍将按预期具有单个空格。
var usd = new Intl.NumberFormat('pt-br', { style: 'currency', currency: 'USD' }).format(12345).replace(/^(D+)/, '$1 ').replace(/s+/, ' ');
var euro = new Intl.NumberFormat('pt-br', { style: 'currency', currency: 'EUR' }).format(12345).replace(/^(D+)/, '$1 ').replace(/s+/, ' ');
var deEuro = new Intl.NumberFormat('de', { style: 'currency', currency: 'EUR' }).format(12345).replace(/^(D+)/, '$1 ').replace(/s+/, ' ');
console.log(usd);
console.log(euro);
console.log(deEuro);
console.log(formatPrice(1200, 'en-US', 'USD'));
console.log(formatPrice(1200, 'fr-FR', 'EUR'));
function formatPrice(value, locale, currency) {
return new Intl.NumberFormat(locale, { style: 'currency', currency })
.format(value)
// if the price begins with digit, place the space after the digit
.replace(/^([d,.]+)/, '$1 ')
// if the price ends with digit, place the space before the digit
.replace(/([d,.]+)$/, ' $1')
}