Intl.NumberFormat.prototype.formatRangeToParts()
formatRangeToParts() 方法是 Intl.NumberFormat 实例的一个方法,它返回一个包含特定于语言环境的令牌的 Array。通过这些令牌,可以构建自定义字符串,同时保留特定于语言环境的部分。这使得提供符合语言环境习惯的自定义数字范围格式成为可能。
语法
formatRangeToParts(startRange, endRange)
参数
返回值
一个包含格式化范围部分的 Array。每个对象都有三个属性:type、value 和 source,每个属性都包含一个字符串。按顺序连接 value 属性的字符串,将得到与调用 formatRange() 相同的结果。type 的值可能与 formatToParts() 的值相同,或者还有一个额外的值 "approximatelySign"(见下文)。source 可以是以下值之一:
startRange-
该令牌是起始数字的一部分。
endRange-
该令牌是结束数字的一部分。
-
该令牌在起始和结束数字之间共享;例如,货币符号。范围模式本身的所有文字字符,例如
"–"分隔符,也被标记为shared。
如果起始和结束数字格式化为相同的字符串,则输出的令牌列表与对起始数字调用 formatToParts() 相同,所有令牌都标记为 source: "shared"。此外,第一个令牌可能是一个“近似等于”符号(例如 “~”),其 type: "approximatelySign"。此符号的插入仅取决于语言环境设置,即使 startRange === endRange 也会插入。
异常
RangeError-
如果
startRange或endRange是NaN或无法转换的字符串,则抛出此错误。 TypeError-
如果
startRange或endRange是undefined,则抛出此错误。
示例
使用 formatRangeToParts()
formatRange() 方法输出本地化的、不透明的字符串,这些字符串无法直接进行操作。
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() 方法以部分的形式生成相同的信息。
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® 2026 国际化 API 规范 # sec-intl.numberformat.prototype.formatrangetoparts |
浏览器兼容性
加载中…