Signatur
Beschreibung
Mit endsWith() prüfen Sie, ob ein String mit einer bestimmten Zeichenfolge endet. Die Methode unterscheidet zwischen Groß- und Kleinschreibung und liefert immer einen booleschen Wert. Typische Anwendungsfälle sind das Prüfen von Dateiendungen, URL-Pfaden, Domain-Suffixen oder Satzzeichen am Textende.
Mit dem optionalen Parameter endPosition legen Sie fest, wo der String für die Prüfung „enden“ soll. Der String wird dann so behandelt, als wäre er nur endPosition Zeichen lang. So lässt sich prüfen, ob ein Teilstück vor einer bestimmten Stelle mit einer Zeichenfolge endet, ohne vorher slice() aufzurufen.
Gegenüber älteren Lösungen wie str.indexOf(suffix, str.length - suffix.length) !== -1 oder regulären Ausdrücken (/\.pdf$/) ist endsWith() besser lesbar und weniger fehleranfällig. Für Muster ohne feste Zeichenfolge, etwa „endet mit einer Ziffer“, brauchen Sie weiterhin einen regulären Ausdruck.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $searchString Pflicht | string | Die Zeichenfolge, nach der am Ende von str gesucht wird. Werte, die kein String sind, werden in einen String umgewandelt (z. B. undefined zu "undefined"). Ein regulärer Ausdruck ist nicht erlaubt und löst einen TypeError aus. |
|
| $endPosition | number | str.length | Die Stelle, an der das Ende von searchString erwartet wird, also die Position direkt hinter dem letzten Zeichen von searchString. Werte über str.length werden auf str.length begrenzt, negative Werte auf 0. |
Rückgabewert
true, wenn der String (bis endPosition) mit searchString endet, sonst false. Ist searchString ein leerer String, ist das Ergebnis immer true.Beispiele
Grundlegende Nutzung und Groß-/Kleinschreibung
const satz = 'Sein oder nicht sein, das ist hier die Frage.';
console.log(satz.endsWith('Frage.'));
console.log(satz.endsWith('frage.')); // Groß-/Kleinschreibung zählt
console.log(satz.endsWith('sein', 19)); // nur die ersten 19 Zeichen
console.log(satz.endsWith(''));
Dateiendungen prüfen, ohne auf Groß-/Kleinschreibung zu achten
const dateien = ['bericht.PDF', 'foto.jpg', 'notizen.txt', 'vertrag.pdf'];
const pdfs = dateien.filter((name) => name.toLowerCase().endsWith('.pdf'));
console.log(pdfs);
// Mehrere erlaubte Endungen
const bildEndungen = ['.jpg', '.jpeg', '.png', '.webp'];
const istBild = (name) => bildEndungen.some((ext) => name.toLowerCase().endsWith(ext));
console.log(istBild('Urlaub.JPEG'));
Domain-Suffix sicher prüfen
const istErlaubterHost = (url) => {
const { hostname } = new URL(url);
// Punkt voranstellen, damit 'boesesbeispiel.de' nicht durchrutscht
return hostname === 'beispiel.de' || hostname.endsWith('.beispiel.de');
};
console.log(istErlaubterHost('https://api.beispiel.de/v1'));
console.log(istErlaubterHost('https://boesesbeispiel.de'));
Abschließenden Schrägstrich ergänzen
const mitSlash = (pfad) => (pfad.endsWith('/') ? pfad : `${pfad}/`);
console.log(mitSlash('/api/users'));
console.log(mitSlash('/api/users/'));
// Wichtig · Fallstricke
- Kein RegExp:
'abc'.endsWith(/c/)löst einenTypeErroraus. Das gilt nicht, wenn beim RegExpSymbol.matchauffalsegesetzt ist. Für Muster verwenden Sie/…$/.test(str). - Groß-/Kleinschreibung: Die Prüfung ist immer exakt. Für eine Prüfung ohne Unterscheidung wandeln Sie beide Seiten vorher mit
toLowerCase()um. - Leerer Suchstring:
endsWith('')liefert immertrue. Das kann bei ungeprüften Benutzereingaben überraschen. - Typumwandlung:
str.endsWith()ohne Argument sucht nach\"undefined\". - Sicherheit: Für Allowlists bei Domains immer mit führendem Punkt prüfen (
'.beispiel.de') und den Hostnamen vorher mitURLauslesen. Ein reinesurl.endsWith('beispiel.de')lässt sich leicht umgehen. - Unicode: Die Prüfung vergleicht UTF-16-Codeeinheiten. Gleich aussehende Zeichen in unterschiedlicher Normalisierung (z. B. „é“ als ein Zeichen oder als „e“ plus Akzent) gelten nicht als gleich. Verwenden Sie bei Bedarf
normalize(). - Kompatibilität: Wird von allen modernen Browsern und von Node.js ab Version 4 unterstützt. Der Internet Explorer unterstützt die Methode nicht, dort ist ein Polyfill nötig.