Hoe te controleren of een string een specifiek woord bevat in PHP?

Gepubliceerd 22 mei 2024

Methode 1: De strpos() functie gebruiken om te controleren of een PHP-string een substring bevat

De strpos() functie is een ingebouwde PHP-functie waarmee je kunt controleren of een string een substring bevat. Het retourneert de index van het eerste voorkomen van de substring in de string, of false als de substring niet wordt gevonden.

Hoe de strpos() functie werkt

De strpos() functie neemt twee parameters:

  1. $haystack: De string waarin gezocht moet worden.
  2. $needle: De substring waarnaar gezocht moet worden.

Het retourneert een integer die de index van het eerste voorkomen van de needle in de haystack vertegenwoordigt, of false als de needle niet wordt gevonden.

Let op dat strpos() een hoofdlettergevoelige zoekopdracht uitvoert. Dit betekent dat het rekening houdt met hoofd- en kleine letters bij het zoeken naar de substring.

Hier is een voorbeeld van hoe je strpos() kunt gebruiken om te controleren of een string een woord bevat:

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

// Test if string contains the word
if (strpos($mystring, $word) !== false) {
    echo "Word Found!";
} else {
    echo "Word Not Found!";
}

In deze code:

  • We stellen de $word variabele in als de substring waarnaar we willen zoeken, namelijk "fox".
  • We hebben ook de $mystring variabele die de zin bevat waarin we naar het woord willen zoeken.
  • We gebruiken de strpos() functie om te controleren of $mystring $word bevat.
    • Als het woord wordt gevonden, retourneert strpos() de index van het eerste voorkomen.
    • Als het woord niet wordt gevonden, retourneert strpos() false.
  • De conditie strpos($mystring, $word) !== false controleert of de geretourneerde waarde niet false is.
    • Als het woord wordt gevonden, is de conditie waar, en wordt de code in het if-blok uitgevoerd, die "Word Found!" print.
    • Als het woord niet wordt gevonden, wordt het else-blok uitgevoerd, die "Word Not Found!" print.

Example

Stel dat je een formulier op je website hebt waar gebruikers hun e-mailadressen kunnen invoeren. Je wilt de e-mailadressen controleren om er zeker van te zijn dat ze van een domein zijn, zoals "example.com". Hier is hoe je strpos() kunt gebruiken om te controleren of het e-mailadres het domein bevat:

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

if (strpos($email, $domain) !== false) {
    echo "Valid email domain!";
} else {
    echo "Invalid email domain!";
}

In dit voorbeeld controleren we of de $email string de $domain substring bevat. Als dat zo is, beschouwen we het e-mailadres als geldig en printen we "Valid email domain!". Als dat niet zo is, printen we "Invalid email domain!".

Verschillen tussen strpos() en stripos() functies

PHP heeft ook de stripos() functie, die vergelijkbaar is met strpos() maar een hoofdletterongevoelige zoekopdracht uitvoert. Dit betekent dat stripos() geen rekening houdt met hoofd- en kleine letters bij het zoeken naar de substring.

Je zou strpos() gebruiken wanneer je een hoofdlettergevoelige zoekopdracht moet uitvoeren en je de exacte hoofdletters van de substring wilt matchen. Je zou stripos() gebruiken wanneer de hoofdletters van de substring er niet toe doen, en je de substring wilt vinden ongeacht de hoofdletters.

Hier is een voorbeeld om het verschil te laten zien:

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

if (strpos($mystring, $word) !== false) {
    echo "Word Found using strpos()!";
} else {
    echo "Word Not Found using strpos()!";
}

if (stripos($mystring, $word) !== false) {
    echo "Word Found using stripos()!";
} else {
    echo "Word Not Found using stripos()!";
}

In dit geval:

  • strpos() zou "Word Not Found!" retourneren omdat het een hoofdlettergevoelige zoekopdracht uitvoert en de substring "Fox" (met een hoofdletter "F") niet bestaat in de string.
  • stripos() zou "Word Found!" retourneren omdat het een hoofdletterongevoelige zoekopdracht uitvoert en de substring "fox" (met een kleine letter "f") in de string vindt.

strpos() vergelijken met andere functies voor het zoeken in strings

PHP heeft andere functies voor het zoeken in strings, zoals strstr(), stristr(), strrchr(), en strpbrk(). Hier is een vergelijking van deze functies:

Functie Beschrijving Retourneert
strpos() Vindt de positie van het eerste voorkomen van een substring Index van het eerste voorkomen of false
strstr() Vindt het eerste voorkomen van een substring Substring vanaf het eerste voorkomen of false
stristr() Hoofdletterongevoelige versie van strstr() Substring vanaf het eerste voorkomen of false
strrchr() Vindt het laatste voorkomen van een teken Substring vanaf het laatste voorkomen of false
strpbrk() Zoekt in een string naar een van een set tekens Substring vanaf het eerste voorkomen of false

Example

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

// Using strpos()
$position = strpos($mystring, "fox");
echo "Position of 'fox' using strpos(): " . $position . "\n";

// Using strstr()
$substring = strstr($mystring, "brown");
echo "Substring from 'brown' using strstr(): " . $substring . "\n";

// Using stristr()
$substring = stristr($mystring, "JUMPS");
echo "Substring from 'JUMPS' using stristr(): " . $substring . "\n";

// Using strrchr()
$substring = strrchr($mystring, "o");
echo "Substring from the last 'o' using strrchr(): " . $substring . "\n";

// Using strpbrk()
$substring = strpbrk($mystring, "aeiou");
echo "Substring from the first vowel using strpbrk(): " . $substring . "\n";

Uitvoer:

Position of 'fox' using strpos(): 16
Substring from 'brown' using strstr(): brown fox jumps over the lazy dog
Substring from 'JUMPS' using stristr(): jumps over the lazy dog
Substring from the last 'o' using strrchr(): og
Substring from the first vowel using strpbrk(): e quick brown fox jumps over the lazy dog

Methode 2: Controleren of een string een woord bevat met str_contains() in PHP 8

PHP 8 heeft een nieuwe functie toegevoegd genaamd str_contains() die het gemakkelijker maakt om te controleren of een string een substring bevat. Deze functie vereenvoudigt het zoeken naar een specifiek woord binnen een string, waardoor de leesbaarheid en prestaties van de code verbeteren.

str_contains() functie

De str_contains() functie is nieuw in PHP 8 en stelt je in staat om te controleren of een string een substring bevat. Het retourneert een boolean-waarde die aangeeft of de substring binnen de string wordt gevonden.

Deze functie biedt een eenvoudigere manier om deze veelvoorkomende taak uit te voeren in vergelijking met het gebruik van strpos() of stripos(), die meer controles voor de geretourneerde waarde nodig hebben.

Syntaxis en gebruik van str_contains()

De str_contains() functie heeft deze syntaxis:

str_contains(string $haystack, string $needle): bool
  • $haystack: De string waarin gezocht moet worden.
  • $needle: De substring waarnaar gezocht moet worden.

De functie retourneert true als de $needle wordt gevonden binnen de $haystack, en false als dat niet het geval is.

Hier is een voorbeeld van hoe je str_contains() kunt gebruiken om te controleren of een string een specifiek woord bevat:

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

if (str_contains($text, $word)) {
    echo "The word '$word' is found in the text.";
} else {
    echo "The word '$word' is not found in the text.";
}

In dit voorbeeld controleert str_contains() of de string $text het woord $word bevat. Omdat het woord "fox" in de tekst staat, retourneert de functie true, en wordt het bericht "The word 'fox' is found in the text." geëchood.

Voordelen van het gebruik van str_contains() boven andere methoden

Het gebruik van str_contains() heeft voordelen ten opzichte van andere methoden zoals strpos() en stripos():

  1. Betere leesbaarheid: De functienaam str_contains() geeft duidelijk het doel aan, waardoor de code beter leesbaar wordt. Het verwijdert de noodzaak voor meer controles op de geretourneerde waarde, omdat het een boolean retourneert.

  2. Eenvoud: Met str_contains() kun je in één functieaanroep controleren of een string een substring bevat. Je hoeft de geretourneerde waarde niet te vergelijken met false of 0, zoals vereist bij strpos() en stripos().

  3. Betere prestaties: De str_contains() functie is gemaakt voor prestaties en is in de meeste gevallen sneller dan het gebruik van strpos() of stripos(). Het vermijdt het retourneren van de positie van de substring, wat niet nodig is wanneer je alleen wilt weten of de substring bestaat.

Methode 3: Reguliere expressies gebruiken om te controleren of een PHP-string een specifiek woord bevat

Reguliere expressies (regex) zijn een hulpmiddel voor het werken met strings in PHP. Ze stellen je in staat om te zoeken naar patronen in tekst, niet alleen naar specifieke woorden, waardoor ze flexibel zijn voor taken voor stringmanipulatie.

preg_match() gebruiken om te controleren of een string een woord bevat

De preg_match() functie in PHP stelt je in staat om te controleren of een string overeenkomt met een regex-patroon. Je kunt dit gebruiken om te controleren of een string een specifiek woord bevat.

De preg_match() functie heeft deze syntaxis:

preg_match(string $pattern, string $subject, array &$matches = null, int $flags = 0, int $offset = 0): int|false
  • $pattern: Het regex-patroon waarmee vergeleken moet worden.
  • $subject: De string waarin gezocht moet worden.
  • $matches: (Optioneel) Een array die gevuld moet worden met de resultaten van de zoekopdracht.
  • $flags: (Optioneel) Flags om het gedrag van de zoekopdracht te wijzigen.
  • $offset: (Optioneel) De offset in de string om de zoekopdracht te starten.

De functie retourneert het aantal gevonden overeenkomsten (0 of 1), of false bij een fout.

Hier is een voorbeeld van het gebruik van preg_match() om te controleren of een string een woord bevat:

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

if (preg_match($pattern, $text)) {
    echo "The word '$word' is found in the string.";
} else {
    echo "The word '$word' is not found in the string.";
}

In deze code:

  • De $text variabele bevat de string waarin gezocht moet worden.
  • De $word variabele bevat het woord waarnaar gezocht moet worden.
  • De $pattern variabele bevat het regex-patroon. Het gebruikt het \b anker om woordgrenzen te matchen, waardoor ervoor gezorgd wordt dat alleen hele woorden worden gematcht (dus "fox" zal niet overeenkomen met "foxes").
  • preg_match() controleert of het $pattern overeenkomt met de $text.
    • Als een overeenkomst wordt gevonden, retourneert het 1, en wordt het "woord gevonden" bericht geëchood.
    • Als geen overeenkomst wordt gevonden, retourneert het 0, en wordt het "woord niet gevonden" bericht geëchood.

Je kunt ook de $matches parameter gebruiken om de gematchte tekst te krijgen:

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

Dit zou als uitvoer geven: "Matched text: fox".

Example

  1. E-mailvalidatie: Je kunt een reguliere expressie gebruiken om te controleren of een string een geldig e-mailadres is. Bijvoorbeeld:

    $email = "john.doe@example.com";
    $pattern = "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/";
    
    if (preg_match($pattern, $email)) {
       echo "Valid email address";
    } else {
       echo "Invalid email address";
    }
  2. Telefoonnummer extractie: Je kunt een reguliere expressie gebruiken om telefoonnummers uit een string te halen. Bijvoorbeeld:

    $text = "Call us at 123-456-7890 or 987-654-3210";
    $pattern = "/\d{3}-\d{3}-\d{4}/";
    
    if (preg_match_all($pattern, $text, $matches)) {
       echo "Phone numbers found: " . implode(", ", $matches[0]);
    } else {
       echo "No phone numbers found";
    }

    Dit zou als uitvoer geven: "Phone numbers found: 123-456-7890, 987-654-3210".

  3. HTML-tag verwijdering: Je kunt een reguliere expressie gebruiken om HTML-tags uit een string te verwijderen. Bijvoorbeeld:

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

    Dit zou als uitvoer geven: "Hello world!".

Voor- en nadelen van het gebruik van reguliere expressies

Reguliere expressies hebben voor- en nadelen bij het controleren of een string een woord bevat.

Voordelen

  • Flexibiliteit: Regexes kunnen complexe patronen matchen, niet alleen specifieke woorden. Je kunt tekenklassen, ankers, kwantificeerders en meer gebruiken om precieze patronen te definiëren.
  • Kracht: Met regexes kun je meer doen dan alleen controleren of een string een woord bevat. Je kunt delen van de string extraheren, tekst vervangen, de string splitsen, en meer.

Nadelen

  • Complexiteit: Regex-syntaxis kan moeilijk te lezen en te schrijven zijn, vooral voor complexe patronen. Dit kan code moeilijker te begrijpen en te onderhouden maken.
  • Prestaties: Voor eenvoudige tekstzoekopdrachten kan het gebruik van regexes langzamer zijn dan het gebruik van stringfuncties zoals strpos() of str_contains(). Regexes moeten het patroon compileren en vervolgens de string doorzoeken, wat tijd kost.

Andere methoden om te controleren of een PHP-string een specifiek woord bevat

De strstr() functie gebruiken

De strstr() functie in PHP is een andere manier om te controleren of een string een specifiek woord bevat. Het zoekt naar het eerste voorkomen van een substring in een string en retourneert de rest van de string vanaf dat punt.

De syntaxis voor strstr() is als volgt:

strstr(string $haystack, string $needle, bool $before_needle = false): string|false
  • $haystack: De string waarin gezocht moet worden.
  • $needle: De substring waarnaar gezocht moet worden.
  • $before_needle: (Optioneel) Als ingesteld op true, retourneert de functie het deel van de string vóór het eerste voorkomen van de substring. Standaard is false.

Hier is een voorbeeld van het gebruik van strstr() om te controleren of een string een woord bevat:

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

if (strstr($text, $word)) {
    echo "The word '$word' is found in the string.";
} else {
    echo "The word '$word' is not found in the string.";
}

In dit voorbeeld zoekt strstr() naar het woord "fox" in de string $text. Als het woord wordt gevonden, retourneert de functie de substring vanaf het eerste voorkomen van "fox" tot het einde van de string. De conditie if (strstr($text, $word)) controleert of de geretourneerde waarde truthy is (niet false), wat aangeeft dat het woord is gevonden.

Example

Stel dat je een lijst met productbeschrijvingen hebt en je wilt controleren of een specifiek trefwoord in elke beschrijving wordt genoemd. Je kunt strstr() gebruiken om naar het trefwoord te zoeken in elke beschrijvingsstring.

$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 "The product '$product' contains the keyword '$keyword'.
"; } }

Uitvoer:

The product 'Apple iPhone 12 Pro Max - 128GB - Pacific Blue' contains the keyword 'iPhone'.

De string in een array splitsen met explode()

Een andere benadering om te controleren of een string een specifiek woord bevat, is om de string in een array van woorden te splitsen met de explode() functie en vervolgens te controleren of het woord in de array bestaat.

De explode() functie breekt een string in een array op basis van een opgegeven scheidingsteken. Hier is de syntaxis:

explode(string $separator, string $string, int $limit = PHP_INT_MAX): array
  • $separator: Het scheidingsteken dat gebruikt wordt om de string te splitsen.
  • $string: De string die gesplitst moet worden.
  • $limit: (Optioneel) Het maximale aantal elementen dat in de array geretourneerd moet worden. Standaard is PHP_INT_MAX.

Hier is een voorbeeld van het gebruik van explode() om te controleren of een string een woord bevat:

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

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

if (in_array($word, $wordsArray)) {
    echo "The word '$word' is found in the string.";
} else {
    echo "The word '$word' is not found in the string.";
}

In deze code splitst explode(" ", $text) de string $text in een array van woorden met behulp van het spatieteken als scheidingsteken. De resulterende array $wordsArray bevat elk woord uit de string als een afzonderlijk element.

De in_array() functie wordt vervolgens gebruikt om te controleren of het woord $word bestaat in de $wordsArray. Als het woord wordt gevonden, retourneert de functie true, en wordt het overeenkomstige bericht geëchood.

Example

Stel dat je een zoekfunctionaliteit op je website hebt waar gebruikers meerdere trefwoorden gescheiden door komma's kunnen invoeren. Je kunt explode() gebruiken om de invoer van de gebruiker in een array van trefwoorden te splitsen en vervolgens naar elk trefwoord in je database of content te zoeken.

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

// Search for products containing any of the keywords
$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 "The product '$product' matches the keyword '$keyword'.
"; } } }

Uitvoer:

The product 'Apple iPhone 12 Pro Max - 128GB - Pacific Blue' matches the keyword 'apple'.
The product 'Samsung Galaxy S21 Ultra 5G - 256GB - Phantom Black' matches the keyword 'samsung'.
The product 'Google Pixel 5 - 128GB - Just Black' matches the keyword 'google'.

De string vergelijken met het woord met behulp van identieke operators

Je kunt ook controleren of een string een specifiek woord bevat door de string direct te vergelijken met het woord met behulp van de identieke operator ===.

Hier is een voorbeeld:

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

if ($text === $word) {
    echo "The string is identical to the word '$word'.";
} else {
    echo "The string is not identical to the word '$word'.";
}

In dit geval wordt de string $text direct vergeleken met het woord $word met behulp van de === operator. Als de string en het woord identiek zijn, evalueert de conditie if ($text === $word) naar true, en wordt het overeenkomstige bericht geëchood.

Deze methode heeft echter beperkingen:

  • Het werkt alleen als de string exact overeenkomt met het woord. Als de string aanvullende tekens bevat of het woord een substring van de string is, zal de vergelijking false retourneren.
  • Het is hoofdlettergevoelig. Als de string en het woord verschillende hoofdletters hebben, zal de vergelijking false retourneren.

Daarom is deze methode alleen geschikt wanneer je wilt controleren of een string identiek is aan een specifiek woord, in plaats van te controleren of de string het woord als een substring bevat.

Example

Overweeg een scenario waarin je een lijst met vooraf gedefinieerde categorieën hebt en je wilt controleren of een gegeven string exact overeenkomt met een van die categorieën.

$categories = ["Electronics", "Clothing", "Home"];
$productCategory = "Electronics";

if (in_array($productCategory, $categories, true)) {
    echo "The product category '$productCategory' is valid.";
} else {
    echo "The product category '$productCategory' is not valid.";
}

In dit voorbeeld voert de in_array() functie met de derde parameter ingesteld op true een strikte vergelijking (identieke operator ===) uit tussen de $productCategory en elk element van de $categories array. Als een exacte overeenkomst wordt gevonden, wordt de productcategorie als geldig beschouwd.

Methode Beschrijving Gebruikscase
strstr() Zoekt naar het eerste voorkomen van een substring in een string Controleren of een string een specifiek woord als substring bevat
explode() Splitst een string in een array op basis van een opgegeven scheidingsteken Een string in woorden splitsen en controleren of een specifiek woord in de array bestaat
Identieke Operator === Vergelijkt een string direct met een woord Controleren of een string exact overeenkomt met een specifiek woord