Intl.NumberFormat.prototype.formatRangeToParts()

Baseline 2023
Newly available

Since August 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

Die Methode formatRangeToParts() von Instanzen von Intl.NumberFormat gibt ein Array von Objekten zurück, das die lokalespezifischen Tokens enthält, aus denen es möglich ist, benutzerdefinierte Zeichenketten zu erstellen, während die lokalespezifischen Teile erhalten bleiben. Dies ermöglicht es, bereichsspezifische, lokalisierte Formate für Zahlenketten bereitzustellen.

Syntax

js
formatRangeToParts(startRange, endRange)

Parameter

startRange

Eine Zahl (Number), ein BigInt oder ein String, der formatiert werden soll. Strings werden auf die gleiche Weise wie bei der Zahlenumwandlung geparst, außer dass formatRangeToParts() den genauen Wert verwendet, den der String darstellt, um einen Verlust der Genauigkeit bei der impliziten Umwandlung in eine Zahl zu vermeiden.

endRange

Eine Zahl (Number), ein BigInt oder ein String, der formatiert werden soll.

Rückgabewert

Ein Array von Objekten, das den formatierten Bereich in Teilen enthält. Jedes Objekt hat drei Eigenschaften: type, value und source, die jeweils eine Zeichenkette enthalten. Die Verkettung der value-Zeichenketten in der angegebenen Reihenfolge ergibt dieselbe Zeichenkette wie formatRange(). Der type kann dieselben Werte haben wie formatToParts() oder den zusätzlichen Wert "approximatelySign" (siehe unten). Der source kann einer der folgenden sein:

startRange

Das Token ist Teil der Startzahl.

endRange

Das Token ist Teil der Endzahl.

shared

Das Token wird zwischen Start und Ende geteilt, wie zum Beispiel das Währungssymbol. Alle Literale, die Teil des Bereichsmusters selbst sind, wie der "–"-Separator, werden ebenfalls als shared markiert.

Wenn die Start- und Endzahlen zur gleichen Zeichenkette formatiert werden, hat die Ausgabe die gleiche Liste von Tokens wie der Aufruf von formatToParts() auf die Startzahl, wobei alle Tokens als source: "shared" markiert sind. Zusätzlich kann das erste Token ein "ungefähres Gleichheits"-Symbol (z.B. "~") mit type: "approximatelySign" sein. Die Einfügung dieses Symbols hängt nur von den Lokaleinstellungen ab und wird auch eingefügt, wenn startRange === endRange.

Ausnahmen

RangeError

Wird ausgelöst, wenn entweder startRange oder endRange NaN oder eine nicht konvertierbare Zeichenkette ist.

TypeError

Wird ausgelöst, wenn entweder startRange oder endRange undefiniert ist.

Beispiele

Verwendung von formatRangeToParts()

Die Methode formatRange() gibt lokalisierte, undurchsichtige Zeichenketten aus, die nicht direkt manipuliert werden können:

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 €"

In vielen Benutzeroberflächen möchten Sie jedoch möglicherweise das Format dieser Zeichenkette anpassen oder es mit anderen Texten mischen. Die Methode formatRangeToParts() liefert die gleichen Informationen in Teilen:

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" },
];

Spezifikationen

Specification
ECMAScript® 2026 Internationalization API Specification
# sec-intl.numberformat.prototype.formatrangetoparts

Browser-Kompatibilität

Siehe auch