Hoofdstuk 19: Reguliere Expressies (Regex)

← Terug naar overzicht

Patronen zoeken met preg_match

Reguliere expressies (regex) zijn patronen waarmee je tekst kunt doorzoeken, valideren en bewerken. In PHP gebruik je preg_match() om te controleren of een patroon voorkomt in een string. De functie geeft 1 terug bij een match, 0 als er geen match is.

Een regex-patroon staat altijd tussen delimiters, meestal /. Bijvoorbeeld: /php/ zoekt naar de tekst "php".

<?php
$tekst = "Ik leer PHP programmeren";
if (preg_match("/PHP/", $tekst)) {
    echo "Gevonden!";
}
?>

Handige metatekens:

Let op: In de oefeningen hieronder hoef je GEEN <?php en ?> tags te typen. Het platform regelt dit automatisch. Je typt alleen de PHP-code zelf.

Oefening 1

Gebruik preg_match() om te controleren of de string "Welkom in 2025" een cijfer bevat (\d). Toon "Bevat een cijfer" als dat zo is.

Jouw code:

Oefening 2

Controleer of de string "hallo wereld" begint met "hallo". Gebruik het ^-teken in je patroon. Toon "Begint met hallo" als dat zo is.

Jouw code:

Oefening 3

Controleer of de string "bestand.pdf" eindigt op ".pdf". Gebruik het $-teken. Toon "Is een PDF" als dat zo is.

Jouw code:

Oefening 4

Schrijf een functie bevatCijfer($tekst) die true teruggeeft als de tekst minstens één cijfer bevat, anders false. Test met "abc123" en toon "Ja" als het resultaat true is.

Jouw code:

Kwantificeerders en tekenklassen

Met kwantificeerders bepaal je hoe vaak een teken mag voorkomen:

Met tekenklassen [...] definieer je een set toegestane tekens:

<?php
// Postcode: 4 cijfers, optionele spatie, 2 hoofdletters
$postcode = "1234 AB";
if (preg_match("/^\d{4}\s?[A-Z]{2}$/", $postcode)) {
    echo "Geldige postcode";
}
?>

Oefening 1

Controleer of de string "abc" alleen uit kleine letters bestaat. Gebruik het patroon /^[a-z]+$/. Toon "Alleen kleine letters" als dat zo is.

Jouw code:

Oefening 2

Schrijf een functie isGeldigePostcode($postcode) die controleert of de postcode het formaat "1234AB" of "1234 AB" heeft (4 cijfers, optionele spatie, 2 hoofdletters). Return true of false. Test met "1234 AB" en toon "Geldig".

Jouw code:

Oefening 3

Schrijf een functie isGeldigTelefoonnummer($nummer) die controleert of het nummer begint met 06 gevolgd door precies 8 cijfers. Test met "0612345678" en toon "Geldig nummer".

Jouw code:

Oefening 4

Schrijf een functie isSterkWachtwoord($wachtwoord) die controleert of het wachtwoord minstens 8 tekens lang is, minstens één hoofdletter bevat ([A-Z]), en minstens één cijfer bevat (\d). Gebruik drie aparte preg_match()-aanroepen. Test met "Welkom123" en toon "Sterk" of "Zwak".

Jouw code:

Zoeken en vervangen met preg_replace

Met preg_replace() kun je tekst vervangen op basis van een patroon. De functie heeft drie parameters: het patroon, de vervanging, en de invoertekst.

<?php
// Alle cijfers vervangen door #
$tekst = "Bel 020-1234567";
$resultaat = preg_replace("/\d/", "#", $tekst);
echo $resultaat; // Bel ###-#######
?>

De i-vlag achter de delimiter maakt de match case-insensitive:

<?php
preg_match("/php/i", "Ik leer PHP"); // Matcht ook "PHP"
?>

Oefening 1

Vervang alle cijfers in de string "Mijn nummer is 06-12345678" door "X". Toon het resultaat.

Jouw code:

Oefening 2

Vervang alle dubbele spaties (twee of meer spaties achter elkaar) in de string "Hallo wereld test" door een enkele spatie. Gebruik het patroon /\s+/. Toon het resultaat.

Jouw code:

Oefening 3

Schrijf een functie censureer($tekst, $woord) die alle voorkomens van het opgegeven woord vervangt door sterretjes (***), ongeacht hoofdletters. Gebruik de i-vlag. Test met censureer("Dit is GEHEIM en geheim", "geheim") en toon het resultaat.

Jouw code:

Oefening 4

Schrijf een functie maakSlug($tekst) die een tekst omzet naar een URL-slug. De functie moet: 1) de tekst naar kleine letters omzetten met strtolower(), 2) alle niet-alfanumerieke tekens (behalve spaties) verwijderen met /[^a-z0-9\s]/, en 3) spaties vervangen door streepjes met /\s+/. Test met "Hallo, Wereld! Dit is PHP." en toon het resultaat.

Jouw code:

Samenvatting