Intl.NumberFormat.prototype.formatRangeToParts()

formatRangeToParts() 方法是 Intl.NumberFormat 实例的方法,它返回一个包含特定于区域设置的标记的 Array 对象,可以通过这些标记构建自定义字符串,同时保留特定于区域设置的部分。这使得可以提供特定于区域设置的自定义数字字符串范围格式。

语法

js
formatRangeToParts(startRange, endRange)

参数

startRange

一个 NumberBigInt

endRange

一个 NumberBigInt

返回值

一个包含已格式化数字范围的各个部分的 Array 对象。

返回的结果结构如下

js
[
  { type: "integer", value: "3", source: "startRange" },
  { type: "literal", value: "-", source: "shared" },
  { type: "integer", value: "5", source: "endRange" },
  { type: "literal", value: " ", source: "shared" },
  { type: "currency", value: "€", source: "shared" },
];

type 属性的可能值包括

currency

货币字符串,例如符号 "$" 和 "€" 或名称 "美元"、"欧元",具体取决于如何指定 currencyDisplay

decimal

小数分隔符字符串 ("。")。

fraction

小数部分。

group

组分隔符字符串 (",")。

infinity

Infinity 字符串 ("∞")。

integer

整数。

literal

格式化数字中的任何文字字符串或空格。

minusSign

减号字符串 ("-")。

nan

NaN 字符串 ("NaN")。

plusSign

加号字符串 ("+")。

percentSign

百分号字符串 ("%")。

unit

单位字符串,例如 "l" 或 "升",具体取决于如何指定 unitDisplay

source 属性的可能值包括

startRange

该对象是范围的起始部分。

endRange

该对象是范围的结束部分。

shared

该对象是范围的 "共享" 部分,例如分隔符或货币。

异常

RangeError

如果 startRange 小于 endRange,或者任一值是 NaN,则抛出该错误。

TypeError

如果 startRangeendRange 未定义,则抛出该错误。

示例

比较 formatRange 和 formatRangeToParts

NumberFormat 输出本地化的、不透明的字符串,无法直接操作。

js
const startRange = 3500;
const endRange = 9500;

const formatter = new Intl.NumberFormat("de-DE", {
  style: "currency",
  currency: "EUR",
});

console.log(formatter.formatRange(startRange, endRange));
// "3.500,00–9.500,00 €"

但是,对于许多用户界面来说,需要自定义此字符串的格式。formatRangeToParts 方法通过按部分提供字符串,使 NumberFormat 格式化程序生成的字符串的特定于区域设置的格式化成为可能。

js
console.log(formatter.formatRangeToParts(startRange, endRange));

// return value:
[
  { type: "integer", value: "3", source: "startRange" },
  { type: "group", value: ".", source: "startRange" },
  { type: "integer", value: "500", source: "startRange" },
  { type: "decimal", value: ",", source: "startRange" },
  { type: "fraction", value: "00", source: "startRange" },
  { type: "literal", value: "–", source: "shared" },
  { type: "integer", value: "9", source: "endRange" },
  { type: "group", value: ".", source: "endRange" },
  { type: "integer", value: "500", source: "endRange" },
  { type: "decimal", value: ",", source: "endRange" },
  { type: "fraction", value: "00", source: "endRange" },
  { type: "literal", value: " ", source: "shared" },
  { type: "currency", value: "€", source: "shared" },
];

规范

规范
ECMAScript 国际化 API 规范
# sec-intl.numberformat.prototype.formatrangetoparts

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅