Wie überprüft man in PHP, ob ein String ein bestimmtes Wort enthält?

Veröffentlicht 27. August 2024

Methode 1: Verwendung der Funktion strpos() zur Überprüfung, ob ein PHP-String einen Substring enthält

Die Funktion strpos() ist eine eingebaute PHP-Funktion, mit der Sie überprüfen können, ob ein String einen Substring enthält. Sie gibt den Index des ersten Vorkommens des Substrings im String zurück oder false, wenn der Substring nicht gefunden wird.

Funktionsweise der strpos() Funktion

Die Funktion strpos() nimmt zwei Parameter:

  1. $haystack: Der zu durchsuchende String.
  2. $needle: Der zu suchende Substring.

Sie gibt eine Ganzzahl zurück, die den Index des ersten Vorkommens der Nadel im Heuhaufen darstellt, oder false, wenn die Nadel nicht gefunden wird.

Beachten Sie, dass strpos() eine Suche unter Berücksichtigung der Groß- und Kleinschreibung durchführt. Das bedeutet, dass bei der Suche nach dem Substring zwischen Groß- und Kleinbuchstaben unterschieden wird.

Hier ist ein Beispiel für die Verwendung von strpos(), um zu überprüfen, ob ein String ein Wort enthält:

$word = "fox";
$mystring = "The quick brown fox jumps over the lazy dog";

// Überprüfen, ob der String das Wort enthält
if (strpos($mystring, $word) !== false) {
    echo "Wort gefunden!";
} else {
    echo "Wort nicht gefunden!";
}

In diesem Code:

  • Wir setzen die Variable $word als den zu suchenden Substring, der "fox" ist.
  • Wir haben auch die Variable $mystring, die den Satz enthält, in dem wir nach dem Wort suchen wollen.
  • Wir verwenden die Funktion strpos(), um zu überprüfen, ob $mystring $word enthält.
    • Wenn das Wort gefunden wird, gibt strpos() den Index seines ersten Vorkommens zurück.
    • Wenn das Wort nicht gefunden wird, gibt strpos() false zurück.
  • Die Bedingung strpos($mystring, $word) !== false prüft, ob der zurückgegebene Wert nicht false ist.
    • Wenn das Wort gefunden wird, ist die Bedingung wahr und der Code im if-Block wird ausgeführt, wodurch "Wort gefunden!" ausgegeben wird.
    • Wenn das Wort nicht gefunden wird, wird der else-Block ausgeführt und "Wort nicht gefunden!" ausgegeben.

Beispiel

Nehmen wir an, Sie haben ein Formular auf Ihrer Website, in das Benutzer ihre E-Mail-Adressen eingeben können. Sie möchten die E-Mail-Adressen überprüfen, um sicherzustellen, dass sie von einer bestimmten Domain, wie "example.com", stammen. Hier ist, wie Sie strpos() verwenden können, um zu überprüfen, ob die E-Mail-Adresse die Domain enthält:

$email = "user@example.com";
$domain = "example.com";

if (strpos($email, $domain) !== false) {
    echo "Gültige E-Mail-Domain!";
} else {
    echo "Ungültige E-Mail-Domain!";
}

In diesem Beispiel überprüfen wir, ob der $email-String den $domain-Substring enthält. Wenn ja, betrachten wir die E-Mail-Adresse als gültig und geben "Gültige E-Mail-Domain!" aus. Wenn nicht, geben wir "Ungültige E-Mail-Domain!" aus.

Unterschiede zwischen den Funktionen strpos() und stripos()

PHP hat auch die Funktion stripos(), die ähnlich wie strpos() ist, aber eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung durchführt. Das bedeutet, dass stripos() bei der Suche nach dem Substring nicht zwischen Groß- und Kleinbuchstaben unterscheidet.

Sie würden strpos() verwenden, wenn Sie eine Suche mit Berücksichtigung der Groß- und Kleinschreibung durchführen müssen und die genaue Schreibweise des Substrings übereinstimmen soll. Sie würden stripos() verwenden, wenn die Schreibweise des Substrings keine Rolle spielt und Sie den Substring unabhängig von seiner Schreibweise finden möchten.

Hier ist ein Beispiel, um den Unterschied zu zeigen:

$word = "Fox";
$mystring = "The quick brown fox jumps over the lazy dog";

if (strpos($mystring, $word) !== false) {
    echo "Wort mit strpos() gefunden!";
} else {
    echo "Wort mit strpos() nicht gefunden!";
}

if (stripos($mystring, $word) !== false) {
    echo "Wort mit stripos() gefunden!";
} else {
    echo "Wort mit stripos() nicht gefunden!";
}

In diesem Fall:

  • strpos() würde "Wort nicht gefunden!" zurückgeben, weil es eine Suche mit Berücksichtigung der Groß- und Kleinschreibung durchführt und der Substring "Fox" (mit einem Großbuchstaben "F") nicht im String existiert.
  • stripos() würde "Wort gefunden!" zurückgeben, weil es eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung durchführt und den Substring "fox" (mit einem Kleinbuchstaben "f") im String findet.

Vergleich von strpos() mit anderen String-Suchfunktionen

PHP verfügt über weitere Funktionen zum Suchen in Strings, wie strstr(), stristr(), strrchr() und strpbrk(). Hier ist ein Vergleich dieser Funktionen:

Funktion Beschreibung Rückgabe
strpos() Findet die Position des ersten Vorkommens eines Substrings Index des ersten Vorkommens oder false
strstr() Findet das erste Vorkommen eines Substrings Substring ab dem ersten Vorkommen oder false
stristr() Groß-/Kleinschreibung ignorierende Version von strstr() Substring ab dem ersten Vorkommen oder false
strrchr() Findet das letzte Vorkommen eines Zeichens Substring ab dem letzten Vorkommen oder false
strpbrk() Sucht in einem String nach einem von mehreren Zeichen Substring ab dem ersten Vorkommen oder false

Beispiel

$mystring = "The quick brown fox jumps over the lazy dog";

// Verwendung von strpos()
$position = strpos($mystring, "fox");
echo "Position von 'fox' mit strpos(): " . $position . "\n";

// Verwendung von strstr()
$substring = strstr($mystring, "brown");
echo "Substring ab 'brown' mit strstr(): " . $substring . "\n";

// Verwendung von stristr()
$substring = stristr($mystring, "JUMPS");
echo "Substring ab 'JUMPS' mit stristr(): " . $substring . "\n";

// Verwendung von strrchr()
$substring = strrchr($mystring, "o");
echo "Substring ab dem letzten 'o' mit strrchr(): " . $substring . "\n";

// Verwendung von strpbrk()
$substring = strpbrk($mystring, "aeiou");
echo "Substring ab dem ersten Vokal mit strpbrk(): " . $substring . "\n";

Ausgabe:

Position von 'fox' mit strpos(): 16
Substring ab 'brown' mit strstr(): brown fox jumps over the lazy dog
Substring ab 'JUMPS' mit stristr(): jumps over the lazy dog
Substring ab dem letzten 'o' mit strrchr(): og
Substring ab dem ersten Vokal mit strpbrk(): e quick brown fox jumps over the lazy dog

Methode 2: Überprüfung, ob ein String ein Wort enthält, mit str_contains() in PHP 8

PHP 8 führte eine neue Funktion namens str_contains() ein, die es einfacher macht zu überprüfen, ob ein String einen Substring enthält. Diese Funktion vereinfacht die Suche nach einem bestimmten Wort innerhalb eines Strings und verbessert die Lesbarkeit und Leistung des Codes.

Die Funktion str_contains()

Die Funktion str_contains() ist neu in PHP 8 und ermöglicht es Ihnen, zu überprüfen, ob ein String einen Substring enthält. Sie gibt einen booleschen Wert zurück, der anzeigt, ob der Substring innerhalb des Strings gefunden wurde.

Diese Funktion bietet im Vergleich zur Verwendung von strpos() oder stripos(), die weitere Überprüfungen des zurückgegebenen Wertes erfordern, eine einfachere Möglichkeit, diese häufige Aufgabe durchzuführen.

Syntax und Verwendung von str_contains()

Die Funktion str_contains() hat folgende Syntax:

str_contains(string $haystack, string $needle): bool
  • $haystack: Der zu durchsuchende String.
  • $needle: Der zu suchende Substring.

Die Funktion gibt true zurück, wenn $needle innerhalb von $haystack gefunden wird, und false, wenn nicht.

Hier ist ein Beispiel für die Verwendung von str_contains() zur Überprüfung, ob ein String ein bestimmtes Wort enthält:

$text = "The quick brown fox jumps over the lazy dog";
$word = "fox";

if (str_contains($text, $word)) {
    echo "Das Wort '$word' wurde im Text gefunden.";
} else {
    echo "Das Wort '$word' wurde im Text nicht gefunden.";
}

In diesem Beispiel überprüft str_contains(), ob der String $text das Wort $word enthält. Da das Wort "fox" im Text vorkommt, gibt die Funktion true zurück, und die Meldung "Das Wort 'fox' wurde im Text gefunden." wird ausgegeben.

Vorteile der Verwendung von str_contains() gegenüber anderen Methoden

Die Verwendung von str_contains() hat Vorteile gegenüber anderen Methoden wie strpos() und stripos():

  1. Bessere Lesbarkeit: Der Funktionsname str_contains() zeigt deutlich seinen Zweck, was den Code lesbarer macht. Es entfällt die Notwendigkeit weiterer Überprüfungen des zurückgegebenen Wertes, da ein boolescher Wert zurückgegeben wird.

  2. Einfachheit: Mit str_contains() können Sie in einem Funktionsaufruf überprüfen, ob ein String einen Substring enthält. Sie müssen den zurückgegebenen Wert nicht mit false oder 0 vergleichen, wie es bei strpos() und stripos() erforderlich ist.

  3. Bessere Leistung: Die Funktion str_contains() ist auf Leistung ausgelegt und in den meisten Fällen schneller als die Verwendung von strpos() oder stripos(). Sie vermeidet die Rückgabe der Position des Substrings, die nicht benötigt wird, wenn Sie nur wissen möchten, ob der Substring existiert.

Methode 3: Verwendung regulärer Ausdrücke zur Überprüfung, ob ein PHP-String ein bestimmtes Wort enthält

Reguläre Ausdrücke (Regex) sind ein Werkzeug zur Arbeit mit Strings in PHP. Sie ermöglichen es Ihnen, nach Mustern in einem Text zu suchen, nicht nur nach bestimmten Wörtern, was sie flexibel für String-Manipulationsaufgaben macht.

Verwendung von preg_match() zur Überprüfung, ob ein String ein Wort enthält

Die Funktion preg_match() in PHP ermöglicht es Ihnen zu überprüfen, ob ein String einem Regex-Muster entspricht. Sie können dies verwenden, um zu überprüfen, ob ein String ein bestimmtes Wort enthält.

Die Funktion preg_match() hat folgende Syntax:

preg_match(string $pattern, string $subject, array &$matches = null, int $flags = 0, int $offset = 0): int|false
  • $pattern: Das zu suchende Regex-Muster.
  • $subject: Der zu durchsuchende String.
  • $matches: (Optional) Ein Array, das mit den Suchergebnissen gefüllt wird.
  • $flags: (Optional) Flags zur Modifikation des Suchverhaltens.
  • $offset: (Optional) Der Offset im String, an dem die Suche beginnen soll.

Die Funktion gibt die Anzahl der gefundenen Übereinstimmungen zurück (0 oder 1) oder false bei einem Fehler.

Hier ist ein Beispiel für die Verwendung von preg_match() zur Überprüfung, ob ein String ein Wort enthält:

$text = "The quick brown fox jumps over the lazy dog";
$word = "fox";
$pattern = "/\b$word\b/";

if (preg_match($pattern, $text)) {
    echo "Das Wort '$word' wurde im String gefunden.";
} else {
    echo "Das Wort '$word' wurde im String nicht gefunden.";
}

In diesem Code:

  • Die Variable $text enthält den zu durchsuchenden String.
  • Die Variable $word enthält das zu suchende Wort.
  • Die Variable $pattern enthält das Regex-Muster. Es verwendet den \b-Anker, um Wortgrenzen zu markieren, sodass nur ganze Wörter gefunden werden (also "fox" würde nicht "foxes" finden).
  • preg_match() überprüft, ob das $pattern im $text gefunden wird.
    • Wenn eine Übereinstimmung gefunden wird, gibt es 1 zurück, und die Meldung "Wort gefunden" wird ausgegeben.
    • Wenn keine Übereinstimmung gefunden wird, gibt es 0 zurück, und die Meldung "Wort nicht gefunden" wird ausgegeben.

Sie können auch den Parameter $matches verwenden, um den gefundenen Text zu erhalten:

if (preg_match($pattern, $text, $matches)) {
    echo "Gefundener Text: " . $matches[0];
}

Dies würde ausgeben: "Gefundener Text: fox".

Beispiel

  1. E-Mail-Validierung: Sie können einen regulären Ausdruck verwenden, um zu überprüfen, ob ein String eine gültige E-Mail-Adresse ist. Zum Beispiel:

    $email = "john.doe@example.com";
    $pattern = "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/";
    
    if (preg_match($pattern, $email)) {
       echo "Gültige E-Mail-Adresse";
    } else {
       echo "Ungültige E-Mail-Adresse";
    }
  2. Telefonnummer-Extraktion: Sie können einen regulären Ausdruck verwenden, um Telefonnummern aus einem String zu extrahieren. Zum Beispiel:

    $text = "Rufen Sie uns an unter 123-456-7890 oder 987-654-3210";
    $pattern = "/\d{3}-\d{3}-\d{4}/";
    
    if (preg_match_all($pattern, $text, $matches)) {
       echo "Gefundene Telefonnummern: " . implode(", ", $matches[0]);
    } else {
       echo "Keine Telefonnummern gefunden";
    }

    Dies würde ausgeben: "Gefundene Telefonnummern: 123-456-7890, 987-654-3210".

  3. HTML-Tag-Entfernung: Sie können einen regulären Ausdruck verwenden, um HTML-Tags aus einem String zu entfernen. Zum Beispiel:

    $html = "<p>Hallo <b>Welt</b>!</p>";
    $pattern = "/<\/?[a-z][a-z0-9]*[^<>]*>/i";
    
    $text = preg_replace($pattern, "", $html);
    echo $text;

    Dies würde ausgeben: "Hallo Welt!".

Vor- und Nachteile der Verwendung regulärer Ausdrücke

Reguläre Ausdrücke haben Vor- und Nachteile bei der Überprüfung, ob ein String ein Wort enthält.

Vorteile

  • Flexibilität: Regexe können komplexe Muster abgleichen, nicht nur spezifische Wörter. Sie können Zeichenklassen, Anker, Quantifizierer und mehr verwenden, um präzise Muster zu definieren.
  • Leistungsfähigkeit: Mit Regexen können Sie mehr tun als nur überprüfen, ob ein String ein Wort enthält. Sie können Teile des Strings extrahieren, Text ersetzen, den String aufteilen und mehr.

Nachteile

  • Komplexität: Die Regex-Syntax kann schwer zu lesen und zu schreiben sein, besonders bei komplexen Mustern. Dies kann den Code schwerer verständlich und wartbar machen.
  • Leistung: Für einfache Textsuchen kann die Verwendung von Regexen langsamer sein als die Verwendung von String-Funktionen wie strpos() oder str_contains(). Regexe müssen das Muster kompilieren und dann den String durchsuchen, was Zeit in Anspruch nimmt.

Andere Methoden zur Überprüfung, ob ein PHP-String ein bestimmtes Wort enthält

Verwendung der Funktion strstr()

Die Funktion strstr() in PHP ist eine weitere Möglichkeit, zu überprüfen, ob ein String ein bestimmtes Wort enthält. Sie sucht nach dem ersten Vorkommen eines Substrings in einem String und gibt den Rest des Strings ab diesem Punkt zurück.

Die Syntax für strstr() ist wie folgt:

strstr(string $haystack, string $needle, bool $before_needle = false): string|false
  • $haystack: Der zu durchsuchende String.
  • $needle: Der zu suchende Substring.
  • $before_needle: (Optional) Wenn auf true gesetzt, gibt die Funktion den Teil des Strings vor dem ersten Vorkommen des Substrings zurück. Standardmäßig ist es false.

Hier ist ein Beispiel für die Verwendung von strstr() zur Überprüfung, ob ein String ein Wort enthält:

$text = "The quick brown fox jumps over the lazy dog";
$word = "fox";

if (strstr($text, $word)) {
    echo "Das Wort '$word' wurde im String gefunden.";
} else {
    echo "Das Wort '$word' wurde im String nicht gefunden.";
}

In diesem Beispiel sucht strstr() nach dem Wort "fox" im String $text. Wenn das Wort gefunden wird, gibt die Funktion den Substring vom ersten Vorkommen von "fox" bis zum Ende des Strings zurück. Die Bedingung if (strstr($text, $word)) überprüft, ob der zurückgegebene Wert "truthy" (nicht false) ist, was darauf hinweist, dass das Wort gefunden wurde.

Beispiel

Nehmen wir an, Sie haben eine Liste von Produktbeschreibungen und möchten überprüfen, ob ein bestimmtes Schlüsselwort in jeder Beschreibung erwähnt wird. Sie können strstr() verwenden, um nach dem Schlüsselwort in jeder Beschreibungszeichenfolge zu suchen.

$products = [
    "Apple iPhone 12 Pro Max - 128GB - Pacific Blue",
    "Samsung Galaxy S21 Ultra 5G - 256GB - Phantom Black",
    "Google Pixel 5 - 128GB - Just Black"
];

$keyword = "iPhone";

foreach ($products as $product) {
    if (strstr($product, $keyword)) {
        echo "Das Produkt '$product' enthält das Schlüsselwort '$keyword'.
"; } }

Ausgabe:

Das Produkt 'Apple iPhone 12 Pro Max - 128GB - Pacific Blue' enthält das Schlüsselwort 'iPhone'.

Aufteilen des Strings in ein Array mit explode()

Ein anderer Ansatz zur Überprüfung, ob ein String ein bestimmtes Wort enthält, besteht darin, den String mit der Funktion explode() in ein Array von Wörtern aufzuteilen und dann zu überprüfen, ob das Wort im Array existiert.

Die Funktion explode() teilt einen String anhand eines angegebenen Trennzeichens in ein Array auf. Hier ist die Syntax:

explode(string $separator, string $string, int $limit = PHP_INT_MAX): array
  • $separator: Das Trennzeichen, das zum Aufteilen des Strings verwendet wird.
  • $string: Der aufzuteilende String.
  • $limit: (Optional) Die maximale Anzahl von Elementen, die im Array zurückgegeben werden sollen. Standardmäßig ist es PHP_INT_MAX.

Hier ist ein Beispiel für die Verwendung von explode() zur Überprüfung, ob ein String ein Wort enthält:

$text = "The quick brown fox jumps over the lazy dog";
$word = "fox";

$wordsArray = explode(" ", $text);

if (in_array($word, $wordsArray)) {
    echo "Das Wort '$word' wurde im String gefunden.";
} else {
    echo "Das Wort '$word' wurde im String nicht gefunden.";
}

In diesem Code teilt explode(" ", $text) den String $text in ein Array von Wörtern auf, wobei das Leerzeichen als Trennzeichen verwendet wird. Das resultierende Array $wordsArray enthält jedes Wort aus dem String als separates Element.

Die Funktion in_array() wird dann verwendet, um zu überprüfen, ob das Wort $word im $wordsArray existiert. Wenn das Wort gefunden wird, gibt die Funktion true zurück, und die entsprechende Nachricht wird ausgegeben.

Beispiel

Angenommen, Sie haben eine Suchfunktion auf Ihrer Website, bei der Benutzer mehrere Schlüsselwörter eingeben können, die durch Kommas getrennt sind. Sie können explode() verwenden, um die Eingabe des Benutzers in ein Array von Schlüsselwörtern aufzuteilen und dann nach jedem Schlüsselwort in Ihrer Datenbank oder Ihrem Inhalt zu suchen.

$userInput = "apple, samsung, google";
$keywords = explode(", ", $userInput);

// Suche nach Produkten, die eines der Schlüsselwörter enthalten
$products = [
    "Apple iPhone 12 Pro Max - 128GB - Pacific Blue",
    "Samsung Galaxy S21 Ultra 5G - 256GB - Phantom Black",
    "Google Pixel 5 - 128GB - Just Black"
];

foreach ($products as $product) {
    foreach ($keywords as $keyword) {
        if (strstr($product, $keyword)) {
            echo "Das Produkt '$product' stimmt mit dem Schlüsselwort '$keyword' überein.
"; } } }

Ausgabe:

Das Produkt 'Apple iPhone 12 Pro Max - 128GB - Pacific Blue' stimmt mit dem Schlüsselwort 'apple' überein.
Das Produkt 'Samsung Galaxy S21 Ultra 5G - 256GB - Phantom Black' stimmt mit dem Schlüsselwort 'samsung' überein.
Das Produkt 'Google Pixel 5 - 128GB - Just Black' stimmt mit dem Schlüsselwort 'google' überein.

Vergleich des Strings mit dem Wort unter Verwendung identischer Operatoren

Sie können auch überprüfen, ob ein String ein bestimmtes Wort enthält, indem Sie den String direkt mit dem Wort unter Verwendung des identischen Operators === vergleichen.

Hier ist ein Beispiel:

$text = "fox";
$word = "fox";

if ($text === $word) {
    echo "Der String ist identisch mit dem Wort '$word'.";
} else {
    echo "Der String ist nicht identisch mit dem Wort '$word'.";
}

In diesem Fall wird der String $text direkt mit dem Wort $word unter Verwendung des Operators === verglichen. Wenn der String und das Wort identisch sind, wertet die Bedingung if ($text === $word) zu true aus, und die entsprechende Nachricht wird ausgegeben.

Diese Methode hat jedoch Einschränkungen:

  • Sie funktioniert nur, wenn der String genau mit dem Wort übereinstimmt. Wenn der String zusätzliche Zeichen enthält oder das Wort ein Substring des Strings ist, wird der Vergleich false zurückgeben.
  • Er ist case-sensitive. Wenn der String und das Wort unterschiedliche Schreibweisen haben, wird der Vergleich false zurückgeben.

Daher ist diese Methode nur geeignet, wenn Sie überprüfen möchten, ob ein String identisch mit einem bestimmten Wort ist, und nicht, wenn Sie überprüfen möchten, ob der String das Wort als Substring enthält.

Beispiel

Betrachten wir ein Szenario, in dem Sie eine Liste vordefinierter Kategorien haben und überprüfen möchten, ob ein gegebener String genau mit einer dieser Kategorien übereinstimmt.

$categories = ["Elektronik", "Kleidung", "Haushalt"];
$productCategory = "Elektronik";

if (in_array($productCategory, $categories, true)) {
    echo "Die Produktkategorie '$productCategory' ist gültig.";
} else {
    echo "Die Produktkategorie '$productCategory' ist nicht gültig.";
}

In diesem Beispiel führt die Funktion in_array() mit dem dritten Parameter auf true gesetzt einen strikten Vergleich (identischer Operator ===) zwischen der $productCategory und jedem Element des $categories-Arrays durch. Wenn eine exakte Übereinstimmung gefunden wird, wird die Produktkategorie als gültig betrachtet.

Methode Beschreibung Anwendungsfall
strstr() Sucht nach dem ersten Vorkommen eines Substrings in einem String Überprüfen, ob ein String ein bestimmtes Wort als Substring enthält
explode() Teilt einen String anhand eines angegebenen Trennzeichens in ein Array auf Teilt einen String in Wörter auf und überprüft, ob ein bestimmtes Wort im Array existiert
Identischer Operator === Vergleicht einen String direkt mit einem Wort Überprüfen, ob ein String genau mit einem bestimmten Wort übereinstimmt