str_contains($haystack, $needle) liefert true, wenn $needle irgendwo in $haystack vorkommt, und sonst false. Es kam mit PHP 8.0 und unterscheidet Groß- und Kleinschreibung.
Anders als strpos() liefert es einen echten Boolean, also gibt es keine Falle nach dem Muster „an Position 0 gefunden sieht aus wie false“.
Syntax
str_contains(string $haystack, string $needle): bool
str_starts_with(string $haystack, string $needle): bool
str_ends_with(string $haystack, string $needle): bool
Alle drei kamen mit PHP 8.0 und arbeiten Byte für Byte, kommen also ohne mb_-Version korrekt mit Japanisch und anderem UTF-8-Text zurecht.
Anfang oder Ende mit str_starts_with und str_ends_with prüfen
Enthält, ohne Groß- und Kleinschreibung
Es gibt kein str_icontains(). Wandle zuerst beide Strings in Kleinbuchstaben um. mb_strtolower() macht auch Buchstaben außerhalb von ASCII klein, etwa É oder Kyrillisch, die strtolower() unverändert lässt.
Der leere Suchstring liefert true
Ein leerer Suchstring wird in jedem String gefunden, auch in einem leeren. Das zählt, wenn der Suchstring aus einem Suchfeld kommt, das der Nutzer leer gelassen hat.
Prüfen, ob ein String eines oder alle von mehreren Wörtern enthält
str_contains() nimmt einen Suchstring. Iteriere über ein Array von Suchstrings: Gib zurück, sobald einer passt, für „irgendeiner“, oder sobald einer nicht passt, für „alle“.
Um zu prüfen, ob ein Wert eines der Elemente eines Arrays ist, statt ein Teilstring eines Strings, verwendest du in_array().
Vor PHP 8: strpos !== false
Code, der unter PHP 7 laufen muss, verwendet strpos() mit striktem Vergleich. Es liefert dieselbe Antwort wie str_contains(), außer bei einem leeren Suchstring: Das strpos() von PHP 7 gab Warning: strpos(): Empty needle aus und lieferte false.
Die letzte Zeile gibt bool(false) aus, obwohl der Text da ist, weil php an Position 0 steht. Solche Prüfungen durch str_contains() zu ersetzen, ist eines der einfachsten Upgrades auf PHP 8.
Häufig gestellte Fragen
Wie prüfe ich in PHP, ob ein String ein Wort enthält?
Unter PHP 8 verwendest du str_contains($haystack, $needle), das true oder false liefert: str_contains('Hello world', 'world') ist true. Unter PHP 7 verwendest du strpos($haystack, $needle) !== false.
Unterscheidet str_contains Groß- und Kleinschreibung?
Ja. Für eine Prüfung ohne Rücksicht auf die Schreibweise wandelst du beide Seiten in Kleinbuchstaben um: str_contains(mb_strtolower($haystack), mb_strtolower($needle)), oder verwendest stripos($haystack, $needle) !== false.
Warum liefert str_contains bei einem leeren String true?
Jeder String enthält den leeren String, also liefert str_contains('abc', '') den Wert true. Wenn der gesuchte String aus einer Nutzereingabe kommt, prüfst du vorher, dass er nicht leer ist.
Wie prüfe ich in PHP, ob ein String mit etwas beginnt oder endet?
Mit str_starts_with($s, 'http') und str_ends_with($s, '.pdf'), beide seit PHP 8.0. Wie str_contains() unterscheiden sie Groß- und Kleinschreibung und liefern einen Bool.