Start · Sprachen · JavaScript · Referenz · String.prototype.endsWith()

String.prototype.endsWith()

Methode

Prüft, ob ein String mit den Zeichen eines anderen Strings endet, und gibt <code>true</code> oder <code>false</code> zurück.

seit JavaScript ES2015 Kategorie: method-property

Signatur

String.prototype.endsWith(searchString, endPosition)

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

Typ
boolean
Beschreibung
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(''));
true false true true

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'));
[ 'bericht.PDF', 'vertrag.pdf' ] true

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'));
true false

Abschließenden Schrägstrich ergänzen

const mitSlash = (pfad) => (pfad.endsWith('/') ? pfad : `${pfad}/`);

console.log(mitSlash('/api/users'));
console.log(mitSlash('/api/users/'));
/api/users/ /api/users/

// Wichtig · Fallstricke

  • Kein RegExp: 'abc'.endsWith(/c/) löst einen TypeError aus. Das gilt nicht, wenn beim RegExp Symbol.match auf false gesetzt 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 immer true. 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 mit URL auslesen. Ein reines url.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.