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
$nachrichtenthält einen einfachen String mit einer Statusbeschreibung.str_contains($nachricht, "versendet")durchsucht den Haystack nach dem exakten Teilstring"versendet"und gibttruezurück, weil er an Position 23 vorkommt.- 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
| Funktion | Rückgabe | Groß-/Kleinschreibung | PHP-Version |
|---|---|---|---|
str_contains() | bool | Sensitiv | 8.0+ |
strpos() | int|false | Sensitiv | 4+ |
stripos() | int|false | Insensitiv | 5+ |
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().