Intl.NumberFormat.prototype.formatRangeToParts()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since August 2023.
Phương thức formatRangeToParts() của các instance Intl.NumberFormat trả về một Array các đối tượng chứa các token theo locale từ đó có thể xây dựng chuỗi tùy chỉnh trong khi vẫn giữ nguyên các phần theo locale. Điều này giúp cung cấp định dạng tùy chỉnh theo locale cho khoảng chuỗi số.
Cú pháp
formatRangeToParts(startRange, endRange)
Tham số
startRange-
Một
Number,BigInt, hoặc chuỗi để định dạng. Chuỗi được phân tích cú pháp theo cách tương tự như trong chuyển đổi số, ngoại trừformatRangeToParts()sẽ dùng giá trị chính xác mà chuỗi đại diện, tránh mất độ chính xác trong quá trình chuyển đổi ngầm định thành số. endRange
Giá trị trả về
Một Array các đối tượng chứa khoảng được định dạng theo từng phần. Mỗi đối tượng có ba thuộc tính, type, value và source, mỗi thuộc tính chứa một chuỗi. Việc nối chuỗi các value, theo thứ tự được cung cấp, sẽ tạo ra cùng chuỗi như formatRange(). type có thể có các giá trị giống như formatToParts(), hoặc giá trị bổ sung "approximatelySign" (xem bên dưới). source có thể là một trong các giá trị sau:
startRange-
Token là một phần của số đầu.
endRange-
Token là một phần của số cuối.
-
Token được chia sẻ giữa đầu và cuối; ví dụ, ký hiệu tiền tệ. Tất cả các ký tự literal là một phần của mẫu khoảng, chẳng hạn như dấu phân cách
"–", cũng được đánh dấu làshared.
Nếu số đầu và số cuối được định dạng thành cùng một chuỗi, đầu ra có cùng danh sách token như khi gọi formatToParts() trên số đầu, với tất cả token được đánh dấu là source: "shared". Ngoài ra, token đầu tiên có thể là ký hiệu "xấp xỉ bằng" (ví dụ: "~") với type: "approximatelySign". Việc chèn ký hiệu này chỉ phụ thuộc vào cài đặt locale và được chèn ngay cả khi startRange === endRange.
Ngoại lệ
RangeError-
Được ném ra nếu
startRangehoặcendRangelàNaNhoặc chuỗi không thể chuyển đổi. TypeError-
Được ném ra nếu
startRangehoặcendRangelà undefined.
Ví dụ
>Sử dụng formatRangeToParts()
Phương thức formatRange() xuất ra các chuỗi được bản địa hóa, không thể thao tác trực tiếp:
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 €"
Tuy nhiên, trong nhiều giao diện người dùng, bạn có thể muốn tùy chỉnh định dạng của chuỗi này hoặc xen kẽ nó với các văn bản khác. Phương thức formatRangeToParts() cung cấp cùng thông tin đó theo từng phần:
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" },
];
Đặc tả kỹ thuật
| Specification |
|---|
| ECMAScript® 2026 Internationalization API Specification> # sec-intl.numberformat.prototype.formatrangetoparts> |