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:
\d — een cijfer (0-9)\w — een woordteken (letter, cijfer, underscore)\s — een spatie of witruimte. — elk willekeurig teken^ — begin van de string$ — einde van de stringLet 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.
Gebruik preg_match() om te controleren of de string "Welkom in 2025" een cijfer bevat (\d). Toon "Bevat een cijfer" als dat zo is.
Controleer of de string "hallo wereld" begint met "hallo". Gebruik het ^-teken in je patroon. Toon "Begint met hallo" als dat zo is.
Controleer of de string "bestand.pdf" eindigt op ".pdf". Gebruik het $-teken. Toon "Is een PDF" als dat zo is.
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.
Met kwantificeerders bepaal je hoe vaak een teken mag voorkomen:
+ — één of meer keer* — nul of meer keer? — nul of één keer{3} — precies 3 keer{2,4} — 2 tot 4 keerMet tekenklassen [...] definieer je een set toegestane tekens:
[a-z] — kleine letter[A-Z] — hoofdletter[0-9] — cijfer (zelfde als \d)[a-zA-Z] — elke letter<?php
// Postcode: 4 cijfers, optionele spatie, 2 hoofdletters
$postcode = "1234 AB";
if (preg_match("/^\d{4}\s?[A-Z]{2}$/", $postcode)) {
echo "Geldige postcode";
}
?>
Controleer of de string "abc" alleen uit kleine letters bestaat. Gebruik het patroon /^[a-z]+$/. Toon "Alleen kleine letters" als dat zo is.
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".
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".
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".
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"
?>
Vervang alle cijfers in de string "Mijn nummer is 06-12345678" door "X". Toon het resultaat.
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.
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.
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.
/patroon/preg_match() controleert of een patroon voorkomt (geeft 1 of 0)preg_replace() vervangt tekst op basis van een patroon\d (cijfer), \w (woordteken), \s (spatie), . (alles)^ (begin), $ (einde)+ (1+), * (0+), ? (0-1), {n} (precies n)[a-z], [A-Z], [0-9], [a-zA-Z0-9]i voor case-insensitive matching