reguläre Ausdrücke
<?php
// reguläre Ausdrücke (regular expressions = regex)
// preg_match() returnt true oder false, wenn ein Muster
// in einer Zeichenkette gefunden wird oder nicht
$str = "Mart1in"; // könnte aus Formular etc. kommen
$pattern = "/^[^0-9]*$/"; // slash ist der Beginn und Ende des regex
/**
* /(Anfang regex)
* ^ überprüft Anfang des Textes, hier: das 1. Zeichen darf keine Zahl haben
* [] überprüft, ob eines der Zeichen innerhalb der Klammer enthalten ist,
* allerdings gilt das nur für das erste Zeichen und wenn man die
* Klammer noch mal einfügt, für das zweite und so weiter
* ^innerhalb der eckigen Klammern verneinend, in den
* eckigen Klammern wird nun überprüft, ob die Zeichen nicht
* enthalten sind
* 0-9 ... in diesem Fall soll überprüft werden, ob keine
* Ziffern in der Zeichenkette sind
* * hier: alle 0-n Zeichen zwischen erstem und letztem Zeichen
* dürfen keine Zahl sein
* $ überprüft das Ende einer Zeichenkette, hier: das letzte Zeichen darf keine Ziffern haben
* / Ende des regex
* für den Ausdruck [0-9] kann man auch [\d] (digits) nehmen
* statt [^\d] kann man auch [\D] nehmen, um Zahlen zu verneinen,
* hier kann man überlegen, ob man nicht lieber 3 Zeichen statt einem
* macht, dafür aber später den Code verstehen
* (mehr davon Link: https://www.w3schools.com/php/php_regex.asp)
*/
// preg_match(muster, zeichenkette); <-Reihenfolge der Übergabeparameter
if( preg_match($pattern, $str) ){
echo("Zeichenkette keine Ziffern");
}
else {
echo("Zeichenkette enthält Ziffern");
}
$var = "ausprobieren";
echo ('<br>--------$var--------<br>'); //wenn man bei echo ""-Anführungsstriche nimmt, gibt er Inhalt v Variable aus,
// bei ''-Anführungszeichen gibt er $var aus, nicht den Inhalt
// deswegen bei echo "" angewöhnen
// Schreibe einen Regex, der eine beliebige Zeichenkette erkennt,
// die mit einem Großbuchstaben beginnt. [A-Z]
$str2 = "tina";
$pattern2 = "/^[A-Z]/";
if( preg_match($pattern2, $str2) ){
echo("Zeichenkette fängt groß an");
}
else {
echo("Zeichenkette fängt nicht groß an");
}
/**
* wenn ich auf ein Symbol prüfen will, das schon als Befehl vergeben ist,
* benutze ich Backslash, um das als
*/
echo ("<br>---------------<br>");
$strUml = "Özkan";
$patternUml = "/^[A-ZÖÄÜ]/";
if( preg_match($patternUml, $strUml) ){
echo("Zeichenkette fängt groß an");
}
else {
echo("Zeichenkette fängt nicht groß an");
}
echo ("<br>---------------<br>");
/**
* prüfen, ob mehrere von einem vorkommt, z. B. www in URL
*/
$strURL = "www.msp-world.de";
$patternURL = "/^w{3}/"; // es ist kein Zeichenvorrat, deswegen sind [] bei einem Zeichen nicht nötig
if( preg_match($patternURL, $strURL) ){
echo("beginnt mit www");
}
else {
echo("beginnt nicht mit www");
}
// wenn man "/^w{3,5}/" eingibt, kann man eine Untergrenze und Obergrenze festlegen
//OHNE Leerzeichen hinter dem Komma
echo ("<br>---------------<br>");
/**
* prüfen einer E-Mail
*/
$mail = "www.msp-world.de";
$patternMail = "/^[A-Za-z0-9._%+-/]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/";
if( preg_match($patternURL, $strURL) ){
echo("valide Mailadresse");
}
else {
echo("invalide Mailadresse");
}
?>
https://www.w3schools.com/php/php_regex.asp