Intl.NumberFormat.prototype.formatRangeToParts()
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit August 2023 browserübergreifend verfügbar.
Die Methode formatRangeToParts() von Intl.NumberFormat-Instanzen gibt ein Array von Objekten zurück, die die gebietsschemaspezifischen Bestandteile enthalten. Daraus lassen sich benutzerdefinierte Zeichenfolgen zusammensetzen, ohne die gebietsschemaspezifischen Teile zu verlieren. So können Zahlenbereiche gebietsschemagerecht und individuell formatiert werden.
Syntax
formatRangeToParts(startRange, endRange)
Parameter
startRange-
Ein zu formatierender
Number-,BigInt- oder Zeichenfolgenwert. Zeichenfolgen werden wie bei der Zahlenkonvertierung verarbeitet.formatRangeToParts()verwendet jedoch den exakten Wert, den die Zeichenfolge darstellt, und vermeidet so einen Präzisionsverlust durch die implizite Konvertierung in eine Zahl. endRange-
Ein zu formatierender
Number-,BigInt- oder Zeichenfolgenwert.
Rückgabewert
Ein Array von Objekten, die den formatierten Bereich in Teilen enthalten. Jedes Objekt hat drei Eigenschaften, type, value und source, die jeweils eine Zeichenfolge enthalten. Werden die value-Zeichenfolgen in der angegebenen Reihenfolge verkettet, ergibt sich dieselbe Zeichenfolge wie bei formatRange(). type kann dieselben Werte wie bei formatToParts() oder zusätzlich den Wert "approximatelySign" haben (siehe unten). source kann einen der folgenden Werte haben:
startRange-
Der Bestandteil gehört zur Anfangszahl.
endRange-
Der Bestandteil gehört zur Endzahl.
-
Der Bestandteil gehört sowohl zur Anfangs- als auch zur Endzahl, beispielsweise ein Währungssymbol. Alle Literale, die zum Bereichsmuster selbst gehören, etwa das Trennzeichen
"–", werden ebenfalls alssharedgekennzeichnet.
Wenn die Anfangs- und die Endzahl als dieselbe Zeichenfolge formatiert werden, enthält die Ausgabe dieselbe Liste von Bestandteilen wie ein Aufruf von formatToParts() für die Anfangszahl. Dabei sind alle Bestandteile mit source: "shared" gekennzeichnet. Zusätzlich kann der erste Bestandteil ein „ungefähr gleich“-Symbol (z. B. „~“) mit type: "approximatelySign" sein. Ob dieses Symbol eingefügt wird, hängt ausschließlich von den Gebietsschemaeinstellungen ab. Es wird auch dann eingefügt, wenn startRange === endRange gilt.
Ausnahmen
RangeError-
Wird ausgelöst, wenn
startRangeoderendRangeNaNoder eine nicht konvertierbare Zeichenfolge ist. TypeError-
Wird ausgelöst, wenn
startRangeoderendRangeundefined ist.
Beispiele
>formatRangeToParts() verwenden
Die Methode formatRange() gibt lokalisierte Zeichenfolgen zurück, deren Bestandteile sich nicht direkt bearbeiten lassen:
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 €"
In vielen Benutzeroberflächen möchten Sie die Formatierung dieser Zeichenfolge jedoch anpassen oder sie mit anderem Text kombinieren. Die Methode formatRangeToParts() liefert dieselben Informationen in einzelnen Bestandteilen:
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" },
];
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Internationalization API Specification> # sec-intl.numberformat.prototype.formatrangetoparts> |