如何在JavaScript中使用localeString获得货币代码和金额之间的空间?
我必须使用带有逗号和句点分隔符的国家代码以货币格式显示数字 例如,如果号码是4294967295000,则如何在JavaScript中使用localeString获得货币代码和金额之间的空间?,javascript,localization,currency,Javascript,Localization,Currency,我必须使用带有逗号和句点分隔符的国家代码以货币格式显示数字 例如,如果号码是4294967295000,则 美国=4294967295000.00美元 印度=42,94,96,72,95000.00卢比 我为印度工作,但为美国,我得到这个字符串,但我需要货币代码和数字之间的空间: var编号=4294967295000; console.log(编号:toLocaleString('en-IN'){ 样式:“货币”,货币:“印度卢比”,货币显示:“代码” })); // 42,94,9
var编号=4294967295000;
console.log(编号:toLocaleString('en-IN'){
样式:“货币”,货币:“印度卢比”,货币显示:“代码”
})); // 42,94,96,72,95000.00印度卢比
控制台日志(编号:toLocaleString('en-US'){
样式:“货币”,货币:“美元”,货币显示:“代码”
})); // USD4294967295000.00
如果您想要修复的是一个三字母代码后跟一个数字的可靠模式,并且您想要通过插入一个空格来修复它,您可以像这样使用此正则表达式:
currencyStr = currencyStr.replace(/^([A-Z]{3})(\d)/, (match, $1, $2) => $1 + ' ' + $2);
我在选项参数中没有看到任何关于空间的内容
于是我从兔子洞出发
当您将选项传递到toLocaleString
时,它将遵循许多步骤。首先,它将传入的选项转换为NumberFormat
对象。它,其中之一是:
A.让c按照6.1中的规定将c转换为大写。
B将numberFormat.[currency]]设置为c
currency
选项传入的任何内容都将转换为大写,并存储在NumberFormat
对象的内部currency
属性中
然后,我们看到在NumberFormat
上使用了一些其他格式,在本例中,特别是positivePattern
内部插槽。规范说明:
这些属性的值必须是包含子字符串“{number}”的字符串值;currency属性中的值还必须包含子字符串“{currency}”。模式字符串不得包含Unicode标准规定的一般类别“数字,十进制数字”中的任何字符
IE注意,在这一点上,对于给定的区域性,我们已经创建了一个对象,该对象有效地具有一个格式字符串,沿着{currency}{number}
。只有在Chrome(至少)的USD情况下,它才是{currency}{number}
。请注意,在IE和Edge中,您将获得USD之后的空格,因此它取决于格式字符串{currency}{number}
下一步,我们进入下一步。第7步说:
a.让currency为numberFormat.[currency]]的值。
b、 如果numberFormat。[[currencyDisplay]]为“代码”,则
i、 让cd成为货币。
c、 否则,如果numberFormat。[[currencyDisplay]]是“符号”,则
i、 设cd为缩写形式的表示货币的ILD字符串。如果实现没有这种货币表示,则使用货币本身。
d、 否则,如果numberFormat。[[currencyDisplay]]是“名称”,则
i、 让cd是一个以长格式表示货币的ILD字符串。如果实现没有这种货币表示,则使用货币本身。
e、 将结果中的子字符串“{currency}”替换为cd
TL;DR-这种行为似乎依赖于浏览器,您需要自己解析并修复生成的字符串。如果您始终需要空格,则没有内置的方法来完成此操作。FWIW、Internet Explorer和Edge都显示USD,后面有空格。感谢您提供详细的答案。