Intl.NumberFormat.prototype.formatRangeToParts()

Baseline 2023
新推出

自 2023 年 8 月起,此功能已在最新的裝置和瀏覽器版本中可用。此功能可能不適用於舊裝置或瀏覽器。

formatRangeToParts() 方法是 Intl.NumberFormat 例項的一個方法,它返回一個包含特定於語言環境的令牌的 Array。透過這些令牌,可以構建自定義字串,同時保留特定於語言環境的部分。這使得提供符合語言環境習慣的自定義數字範圍格式成為可能。

語法

js
formatRangeToParts(startRange, endRange)

引數

startRange

要格式化的 NumberBigInt 或字串。字串的解析方式與 數字轉換 中的方式相同,但 formatRangeToParts() 會使用字串表示的精確值,避免在隱式轉換為數字時丟失精度。

endRange

要格式化的 NumberBigInt 或字串。

返回值

一個包含格式化範圍部分的 Array。每個物件都有三個屬性:typevaluesource,每個屬性都包含一個字串。按順序連線 value 屬性的字串,將得到與呼叫 formatRange() 相同的結果。type 的值可能與 formatToParts() 的值相同,或者還有一個額外的值 "approximatelySign"(見下文)。source 可以是以下值之一:

startRange

該令牌是起始數字的一部分。

endRange

該令牌是結束數字的一部分。

shared

該令牌在起始和結束數字之間共享;例如,貨幣符號。範圍模式本身的所有文字字元,例如 "–" 分隔符,也被標記為 shared

如果起始和結束數字格式化為相同的字串,則輸出的令牌列表與對起始數字呼叫 formatToParts() 相同,所有令牌都標記為 source: "shared"。此外,第一個令牌可能是一個“近似等於”符號(例如 “~”),其 type: "approximatelySign"。此符號的插入僅取決於語言環境設定,即使 startRange === endRange 也會插入。

異常

RangeError

如果 startRangeendRangeNaN 或無法轉換的字串,則丟擲此錯誤。

TypeError

如果 startRangeendRangeundefined,則丟擲此錯誤。

示例

使用 formatRangeToParts()

formatRange() 方法輸出本地化的、不透明的字串,這些字串無法直接進行操作。

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() 方法以部分的形式生成相同的資訊。

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® 2026 國際化 API 規範
# sec-intl.numberformat.prototype.formatrangetoparts

瀏覽器相容性

另見