如何在JavaScript中使用localeString获得货币代码和金额之间的空间?

如何在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

我必须使用带有逗号和句点分隔符的国家代码以货币格式显示数字

例如,如果号码是4294967295000,则

  • 美国=4294967295000.00美元
  • 印度=42,94,96,72,95000.00卢比
  • 我为印度工作,但为美国,我得到这个字符串,但我需要货币代码和数字之间的空间:

    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
    对象。它,其中之一是:

  • 如果s是“货币”,则
    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步说:

  • 如果numberFormat.[style]]的值为“currency”,则
    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,后面有空格。感谢您提供详细的答案。