Regex Sammlung
In diesem Artikel werden verschiedenste Reguläre Ausdrücke (engl. Regular expression), nach Themenschwerpunkten getrennt, aufgelistet. Reguläre Ausdrücke sind ein wichtiges Mittel um z.B. Benutzereingaben zu prüfen oder Daten zu entschärfen bzw. zu korrigieren/ändern.
Reguläre Ausdrücke Ziffern
Nun zur Praxis, in diesem Teil geht es um erste, sehr einfache Reguläre Ausdrücke zum Thema Ziffern.
Ziffern sind ein häufiges Anwendungsgebiet, viele Datensätze aus Datenbanken werden z.B. über Ziffern angesprochen. Aber auch wenn Angaben zu Jahreszahlen oder Tages/Monatsanzahlen eingegeben und geprüft werden müssen hilft ein Regex bei der Validierung.
Generell muss jede Eingabe von außen geprüft und entschärft werden, aber auch interne Ergebnisse sind nötigenfalls zu prüfen. Eine Null 0 oder ein leerer Wert sind, nicht dasselbe! Wenn Sie mit etwas rechnen wollen brauchen Sie eine Ziffer, ein leerer Wert führt dabei zu einem Fehler oder unerwarteten Ergebnissen. Eine korrekte Eingabevalidierung nimmt auch potentiellen Angreifern die Möglichkeit Schadcode einzuschleusen.
Bitte beachten!
preg_match und preg_match_all durchsuchen dabei eine Zeichenkette nach dem Suchmuster, preg_replace führt hingegen Ersetzungen aus. Die Angaben die im folgenden mit $eingabe bezeichnet werden sind im richtigen Script POST, GET, REQUEST oder COOKIE Daten.
1. Beispiel, alles was keine Ziffen sind entfernen
$eingabe = 'x5tf'; // nur Zahlen erlauben $wert = preg_replace('/[^0-9]/', '', $eingabe); echo $wert; // Ausgabe = 5
oder
$eingabe = 'x5tf'; // nur Zahlen erlauben $wert = preg_replace('/\D/', '', $eingabe); echo $wert; // Ausgabe = 5
Übrig bleibt hier jedesmal die Zahl 5, alle anderen Zeichen werden ausgefiltert.
Muss die Eingabe aus Ziffern bestehen, das Ergebnis ist aber leer ist weil gar keine Ziffer vorkommt – so setzt man einen möglichst passenden Defaultwert. Welcher das ist ist immer abhängig von den Scripterfordernissen.
Beispiel:
$eingabe = 'xtf'; // nur Zahlen erlauben $wert = preg_replace('/[^0-9]/', '', $eingabe); // Wenn $wert leer dann 0 ansonsten $wert $wert = $wert == '' ? 0 : $wert; echo $wert; // Ausgabe == 0
2. Beispiel, auf Ziffern prüfen
Hier wird geprüft ob die Eingabe von Stringanfang ^ bis Ende $ nur aus Ziffern besteht
$eingabe = 150; // nur Zahlen erlauben if (preg_match('/^[0-9]+$/', $eingabe)) { echo "OK, $eingabe passt"; } else { echo "Ooops Fehler, $eingabe passt nicht"; }
Hier wird geprüft ob die Eingabe aus mindestens 3 aber höchstens 5 Ziffern besteht
$eingabe = 1588; // nur Zahlen erlauben if (preg_match('/^[0-9]{3,5}$/', $eingabe)) { echo "OK, $eingabe passt"; } else { echo "Ooops Fehler, $eingabe passt nicht, muss zwischen 3 und 5 Ziffern beinhalten"; }
Möchte man nur 2 oder 4 stellige Zahlen erlauben kann man den Regex mit einer Alternative | notieren. Hier können etweder zahlen von 10 – 99 oder von 1000 – 9999 eingegeben werden.
$eingabe = 15999; // nur Zahlen erlauben if (preg_match('/^([0-9]{2}|[0-9]{4})$/', $eingabe)) { echo "OK, $eingabe passt"; } else { echo "Ooops Fehler, $eingabe passt nicht, muss entweder 2 oder 4 Ziffern beinhalten"; }
Möchte man einen Zahlenbereich prüfen, so dass z.B. die Zahl 4 Stellen haben muss und mit 19 oder 20 beginnt, notiert man so:
$eingabe = 2064; // nur Zahlen erlauben if (preg_match('/^(19|20)\d{2}$/', $eingabe)) { echo "OK, $eingabe passt"; } else { echo "Ooops Fehler, $eingabe passt nicht, Zahl muss mit 19 oder 20 beginen und darf max 4 Ziffern lang sein"; }
Hier wird der Bereich noch präziser bezeichnet, entweder von 1900 – 1999 oder 2000 – 2008
$eingabe = 2005; // nur Zahlen erlauben if (preg_match('/^(19\d{2}|200[0-8]{1})$/', $eingabe)) { echo "OK, $eingabe passt"; } else { echo "Ooops Fehler, $eingabe passt nicht, Zahl muss entweder von 1900 - 1999 gehen oder von 2000 bis max. 2008"; }
Weitere Informationen
- Metazeichen, Quantifikatoren und Zeichenklassensymbole
- Reguläre Ausdrücke Ziffern
- Reguläre Ausdrücke Buchstaben und Ziffern
- Testen eines Datums mittels Regex Neu
- Regex zum auffinden von URLs in Daten Neu
Keine Kommentare vorhanden