如何通过Intl.NumberFormat或类似工具仅获取指定货币符号?
获取仅货币符号的实现方案
Intl.NumberFormat本身没有直接返回纯货币符号的配置项,但可以通过以下两种可靠方法实现需求:
方法1:用formatToParts精准提取货币符号
Intl.NumberFormat的formatToParts方法会把格式化后的内容拆分为结构化的部分数组,我们只需筛选出类型为currency的部分就能拿到纯符号,这种方法不受不同地区符号位置影响(有的在数字前,有的在数字后),兼容性和可靠性都很强。
代码示例:
function getCurrencySymbol(currency, locale = 'en-EN') { const formatter = new Intl.NumberFormat(locale, { style: 'currency', currency: currency, minimumFractionDigits: 0, maximumFractionDigits: 0 }); const parts = formatter.formatToParts(0); const currencyPart = parts.find(part => part.type === 'currency'); return currencyPart ? currencyPart.value : ''; } // 测试调用 console.log(getCurrencySymbol('EUR', 'en-EN')); // 输出 "€" console.log(getCurrencySymbol('USD', 'en-US')); // 输出 "$" console.log(getCurrencySymbol('JPY', 'ja-JP')); // 输出 "¥"
方法2:从格式化结果中剥离数字
如果追求代码简洁,也可以格式化一个0值,再去掉结果里的数字和空格部分。不过这种方法依赖于格式化后的字符串结构,不如方法1通用,但对于大部分常见场景足够用:
function getCurrencySymbol(currency, locale = 'en-EN') { const formattedStr = new Intl.NumberFormat(locale, { style: 'currency', currency: currency, minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(0); return formattedStr.replace(/[0\s]/g, ''); } // 测试调用 console.log(getCurrencySymbol('EUR', 'en-EN')); // 输出 "€"
优先推荐方法1,能避免因地区格式差异导致的异常。
内容的提问来源于stack exchange,提问作者user19697663
相关产品推荐
相关产品推荐

