Fallstricke bei der Anwendung von regulären Ausdrücken

Reguläre Ausdrücke sind ein mächtiges Werkzeug, um ein Muster innerhalb eines Textes zu finden oder die Eingabe einer Zeichenfolge auf deren gültiges Format zu validieren. Je nach Verwendung des regulären Ausdrucks gibt es jedoch einige Punkte zu beachten, auf die wir hier aufmerksam machen wollen.

Validierung von Feldwerten

Validierung einer 5-stelligen Zahl (als Text, z.B. Postleitzahl)

Bei Text-Attributen kann der eingegebene Wert gegen ein angegebenes Format in Form eines regulären Ausdrucks validiert werden. Der im ersten Moment offensichtliche reguläre Ausdruck “[0-9]{5}” ist jedoch nicht richtig, so dass damit auch eine 6- bzw. 7-stellige Zahl akzeptiert würde. Das Problem wird folgend durch ein Beispiel dargestellt. Als Wert wird die Zahl “1234567” verwendet.

  • RegEx "[0-9]{5}" > Es wird validiert, ob eine 5-stellige Ziffernfolge vorhanden ist. Die Validierung ist gültig, da folgende 6-stelligen Zahlen aus der Zeichenfolge erkannt werden: 12345, 23456, 34567

  • RegEx "^[0-9]{5}" > Es wird validiert, ob der Wert mit einer 5-stelligen Ziffernfolge beginnt. Die Validierung ist gültig, da folgende 5-stellige Zahl aus der Zeichenfolge erkannt wird: 12345

  • RegEx "[0-9]{5}$" > Es wird validiert, ob der Wert mit einer 5-stelligen Ziffernfolge endet. Die Validierung ist gültig, da folgende 5-stellige Zahl aus der Zeichenfolge erkannt wird: 34567

  • RegEx "^[0-9]{5}$" > Es wird validiert, ob der Wert von Beginn bis Ende aus einer 5-stelligen Ziffernfolge besteht. Die Validierung ist falsch, da keine exakt 5-stellige Zahl erkannt wird.

Damit beim Attribut eine exakt 5-stellige Zahl validiert wird, muss also der reguläre Ausdruck “^[0-9]{5}$“ verwendet werden. Statt “[0-9]“ kann auch “\d” verwendet werden, womit sich alterativ der reguläre Ausdruck “^\d{5}$“ ergibt.

 

Validierung von Sonderzeichen

Soll ein eingegebener Text dahingehend geprüft werden, dass keine Sonderzeichen enthalten sind, kann dies mit folgendem regulärem Ausdruck geprüft werden:

“^[^<>!#@]+$”

Was bedeutet dies:

  • Das führende ^ und abschließende $ bedeutet, dass der gesamte String als Ganzes betrachtet werden soll

  • Das ^ innerhalb der eckigen Klammern bedeutet eine Negation der folgenden Zeichen, also dass die in den eckigen Klammern angegebenen Zeichen nicht enthalten sein dürfen

  • Innerhalb den eckigen Klammern stehen alle Zeichen, welche ausgeschlossen werden sollen. Hierbei ist jedoch zu beachten, dass manche Zeichen mit Metabedeutung (z.B. der Backslash “\”) mit einem Backslash “escapted” werden müssen (z.B. ein Backslash als Zeichen: “\\” oder ein Plus-Zeichen: “\+”)

  • Das + hinter den eckigen Klammern bedeutet, dass kein einziges Zeichen davon vorkommen darf (Quantor “beliebig oft, aber mindestens einmal”, jedoch negiert)

 

Suche nach einem String innerhalb eines Textes

Suche nach einer 5-stelligen Zahl (z.B. Postleitzahl)

Im Gegensatz zur Validierung eines Feldwertes können hier die beiden Zeichen für den Beginn (^) und das Ende ($) eines Textes nicht verwendet werden, da der zu suchende String sich normalerweise irgendwo mitten im Text befindet. Hier könnte man z.B. über vorangehende und nachfolgende Whitespaces (z.B. Leerzeichen, Tabulatoren) die Zahl auf 5 Stellen einschränken. Statt “\d{5}” also “\s?\d{5}\s?”, womit 6- und mehrstellige Zahlen ausgeschlossen werden.

 

 



Verwandte Themen