PHP string contains: Teilstring sicher prüfen

Für einen PHP String Contains Check nutze str_contains(), um zu prüfen, ob ein String einen anderen enthält, und ein boolesches Ergebnis zu erhalten. Die Funktion passt zu Guard-Clauses, Routing-Prüfungen und Eingabevalidierung, wenn nur Ja/Nein zählt. Gegenüber strpos() vermeidest du die 0-ist-falsy-Falle und schreibst ohne !== false lesbarer. str_contains() ist ab PHP 8.0 verfügbar.

PHP String Contains Beispiel Für Teilstring-Prüfung

Ausgabe:

Die Ausgabe erscheint hier...

Ausgabe:

Status: versendet

So Funktioniert Dieses Beispiel

  1. $nachricht enthält einen einfachen String mit einer Statusbeschreibung.
  2. str_contains($nachricht, "versendet") durchsucht den Haystack nach dem exakten Teilstring "versendet" und gibt true zurück, weil er an Position 23 vorkommt.
  3. Der if-Block wird ausgeführt, weil der Rückgabewert bereits boolean ist - kein Type-Juggling-Vergleich nötig.

Was Ist str_contains in PHP?

str_contains(string $haystack, string $needle): bool ist eine PHP-8.0-Funktion für eine case-sensitive, binary-safe Teilstring-Prüfung. Sie gibt true zurück, wenn $needle irgendwo in $haystack gefunden wird, und sonst false. Eine leere $needle liefert immer true - ein definiertes Verhalten in der PHP-Spezifikation, kein Bug.

Häufige Fehler Mit str_contains()

Case-insensitive Matching erwarten

Falsch:

str_contains("Hello World", "hello"); // false

Richtig:

stripos("Hello World", "hello") !== false; // true

str_contains() unterscheidet zwischen Groß- und Kleinschreibung. Für case-insensitive Suchen nutze stripos() !== false (oder normalisiere beide Strings vor dem Aufruf von str_contains()).

strpos() wie einen Boolean behandeln (Migrationsfalle)

Falsch:

if (strpos("versendet", "ver")) echo "Treffer"; // keine Ausgabe (0 ist falsy)

Richtig:

if (strpos("versendet", "ver") !== false) echo "Treffer";

Unter PHP 8+ ist str_contains() die bessere Wahl, wenn nur ein boolesches Ergebnis benötigt wird.

str_contains vs strpos vs stripos

FunktionRückgabeGroß-/KleinschreibungPHP-Version
str_contains()boolSensitiv8.0+
strpos()int|falseSensitiv4+
stripos()int|falseInsensitiv5+

Nutze str_contains(), wenn du unter PHP 8+ nur einen booleschen Check brauchst. Nutze strpos(), wenn du die Trefferposition brauchst oder PHP 7.x unterstützen musst. Nutze stripos() für case-insensitive Teilstring-Suchen, wenn du zusätzlich die Trefferposition brauchst (es liefert den Index wie strpos()).

FAQ

Ist str_contains case-sensitive?

Ja. str_contains("PHP", "php") gibt false zurück. Für case-insensitive Checks kannst du entweder beide Argumente mit strtolower() normalisieren, bevor du str_contains() aufrufst, oder stripos($haystack, $needle) !== false verwenden.

Warum gibt str_contains für einen leeren String true zurück?

Per Definition ist der leere String ein Teilstring jedes Strings. Das entspricht dem Verhalten von strpos("anything", ""), das in PHP 8 den Wert 0 zurückgibt. Prüfe leere Benutzereingaben vor dem Aufruf von str_contains(), wenn das in deiner Logik zu falschen Treffern führen würde.

Wie prüft man string contains in PHP 7?

Nutze strpos($haystack, $needle) !== false. Der strikte Vergleich !== false ist entscheidend, weil strpos() bei einem Treffer am Stringanfang 0 zurückgibt - und 0 ist in PHP falsy. Genau diese Stolperfalle ist ein Hauptgrund für die Einführung von str_contains().