Menu

PHP str_contains(): prüfen, ob ein String Text enthält

str_contains($haystack, $needle) liefert true, wenn $needle irgendwo in $haystack vorkommt. Hier: die Version ohne Groß- und Kleinschreibung, str_starts_with und str_ends_with, auf mehrere Wörter prüfen und die Version mit strpos für PHP 7.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

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.

Illustration der Programmiersprachen bei Coddy

Lerne mit Coddy zu programmieren

LOS GEHT'S