RegEx (Reguläre Ausdrücke): Geheimwaffe der Programmierer

RegEx (Reguläre Ausdrücke): Geheimwaffe der Programmierer

Reguläre Ausdrücke oder kurz RegEx oder RegExp (regular expressions) sind Zeichenketten, die es uns ermöglichen Strings anhand eines vorgegebenen Musters zu vergleichen und Ausdrücke zu ersetzen. Hilfreich ist das zum Beispiel bei der Validierung von Benutzereingaben. RegEx ist vielfältig einsetzbar und deshalb eine echte Geheimwaffe!

Wenn Du direkt mit dem coden starten willst, springe direkt dort hin!

Was ist RegEx?

Ich benutze RegEx bereits seit vielen Jahren und mit ein wenig Übung kann man damit sehr leicht Benutzereingaben validieren. Darauf wollen wir auch in diesem Beitrag genauer eingehen, aber zuvor erstmal etwas zur allgemeinen Verwendung von RegEx.

Vielen ist RegEx bereits begegnet – vielleicht auch unbewusst. Beispielsweise in dem Texteditor Sublime Text 3, aber auch in so gut wie jedem anderen Texteditor gibt es in der Suchfunktion eine Möglichkeit, nach genau diesen Ausdrücken zu suchen und ggf. zu ersetzen.

RegEx in Sublime Text 3

Es funktioniert, als würden wir in einem Haufen Menschen bestimmte Menschen suchen. Wir können alle Menschen suchen, die etwas Rotes tragen. Wir können aber auch nur die Menschen suchen, die ein rotes Oberteil tragen. Bei RegEx suchen wir eben in einer Liste von Strings (Textdatei) bestimmte Zeichenketten (hier rote Oberteile). Für uns Menschen ist diese Aufgabe jedoch viel schwerer als für einen Computer. Deshalb ist RegEx auch ein so mächtiges Werkzeug.

Wimmelbild zur Erklärung von RegEx

Wir gehen hier nur auf die Validierung von Benutzereingaben ein. Hier ein kleiner Auszug an Daten, die wir darüber sehr gut validieren können:

  • Telefonnummern
  • E-Mail Adressen
  • Benutzernamen
  • URLs
  • Bankdaten
  • Alter
  • Geburtsdaten
  • Passwortsicherheit
  • und viele mehr…

Und wie mache ich das nun!?

Zum Testen und „Bauen“ von RegEx nutze ich regex101.com. Ich finde diese Seite super, da ich hier neben Liveänderungen und Match Anzeigen auch zwischen den für mich wichtigen Sprachen, wie PHP und JavaScript wechseln kann. In manchen Sprachen gibt es minimale Abweichungen.

regex101.com Beispiel

Da Validierung serverseitig stattfinden sollte, zeige ich die Validierung einmal für PHP und für JavaScript (Node.js). Die angegebenen Ausdrücke brauchst Du erstmal nicht zu beachten, auf die einzelnen Komponenten gehe danach ein.

Validierung in PHP

Den RegEx String schreiben wir als normalen String, am Anfang und am Ende müssen wir aber noch ein Slash anfügen. Die Variable $password ist in Deinem Code natürlich aus dem POST oder GET Request.

Danach rufen wir die Funktion preg_match() auf. Dieser Funktion übergeben wir das Passwort und den RegEx String. Sie schaut dann, ob der Ausdruck in unserem Passwort vorkommt und gibt eine entsprechende Meldung aus.

<?php
$regex = "/[A-Za-z0-9]{6,32}/";
$password = "JOsdf35409";

if(preg_match($regex, $password)) {
    exit("password valid");
} else {
    exit("password invalid");
}
?>

Validierung in JavaScript (Node.js)

In JavaScript funktioniert es fast identisch. Auch hier haben wir den RegEx String und unser Passwort in einer Varibale. Zwei kleine Unterschiede gibt es allerdings:

Hinter unserem Ausdruck hängt noch ein kleines „g“ an. Das ist ein Modifier und gibt an, wo nach dem Vorkommen gesucht werden soll. In diesem Fall steht „g“ für global. Zusätzlich wird in JavaScript die Funktion match() auf dem zu validierenden String aufgerufen. Das Ergebnis ist aber das gleiche wie im PHP.

var regex = /[A-Za-z0-9]{6,32}/g;
var password = 'JOsdf35409';

if (password.match(regex)) {
    console.log('password valid');
} else {
    console.log('password invalid');
}

Passwortstärke validieren

Eine sehr wichtige Funktion ist es, Passwörter auf Sicherheit zu prüfen. Genau dafür erstellen wir hier einen RegEx String. Wie Du ihn dann einsetzen kannst, hast du bereits im vorherigen Schritt erfahren. Nicht abschrecken lassen, es sieht schlimmer aus, als es ist!

^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z]).{3,32}$

String begrenzen

Die Zeichen „^“ und „$“ zeigen an, dass der String beginnt und endet. Davor und danach also nichts mehr folgen darf.

Gruppieren

Wie auch in der Mathematik gruppieren Klammern einzelne Ausdrücke. So auch hier.

Dabei verwirren die „?=“ am Anfang der Klammern vielleicht. Diese besagen nur, dass die Ausdrücke nicht gematcht werden sollen. Das ist hier nicht notwendig. In anderen Einsatzgebieten möchten wir aber z.B. einen bestimmten Teil des Strings „rausholen“. Für dieses Beispiel könnte man die zwei Zeichen aber auch weg lassen.

Zeichen, Ziffern und Sonderzeichen suchen

Das „.*“ bedeutet: Alles, so oft wie man will. Der Punkt steht für jedes Zeichen und das Sternchen besagt, so oft man will. Hier kann also jedes Zeichen folgen.

Die „[]“ Klammern geben Mengen an. Hier haben wir eine Menge von Zeichen, Ziffern und Sonderzeichen. „A-Z“ bedeutet, dass es alle Großbuchstaben von A-Z sein dürfen. Das gleiche gilt für „a-z“ für Kleinbuchstaben und „0-9“ für Ziffern.

Alle erlaubten Sonderzeichen sind hier einzeln aufgeführt.

Länge festlegen

Über den Ausdruck „{3,32}“ können wir die Länge festlegen. Der erste Parameter ist die minimale Länge und der zweite Parameter die maximale Länge. In diesem Fall soll unser Passwort mindestens drei, aber maximal 32 Zeichen lang sein.

So sieht meine Version zum Validieren der Passwortstärke aus. Natürlich gibt es unendlich viele Möglichkeiten. Wenn Du möchtest, dass das Passwort mindestens 10 Zeichen lang ist, kannst Du es nun entsprechend anpassen.

Fazit

RegEx, oder Reguläre Ausdrücke sind – wie anfangs erwähnt – eine echt Geheimwaffe! Unschlagbar schnell lassen sich Daten validieren. Wenn Du noch mehr zu RegEx lernen willst, kann ich Dir diese interaktiven Aufgaben ans Herz legen. Auch ich habe damit mal angefangen und sie führen Dich Schritt für Schritt durch die einzelnen Ausdrücke.

Wenn Du Probleme hast einen RegEx String für dein Problem zu erstellen, findest Du im Internet auch schon viele Ergebnisse, die Du benutzen kannst. Einfach Dr. Google fragen. 😉

Ich hoffe, ich konnte Dir die Geheimwaffe der Programmierer schmackhaft machen, denn früher oder später wirst Du auf eine Problem stoßen, welches sich mit RegEx lösen lässt! 🙂

NEW 🚀

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.