符号后空格与 JS 国际机场



我想用 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') 
}

相关内容

  • 没有找到相关文章

最新更新