Reguläre Ausdrücke und Datenvalidierung in Formularen
Reguläre Ausdrücke und Datenvalidierung in Formularen
Was sind reguläre Ausdrücke und wie verwendet man sie?
Ein regulärer Ausdruck, kurz Regex, ist ein Muster, das einen bestimmten Textabschnitt beschreibt. Wenn Sie beispielsweise sicherstellen möchten, dass eine Person, die ein Formular ausfüllt, genau den von Ihnen geforderten Text eingibt, können Sie einen regulären Ausdruck verwenden, um ein bestimmtes Eingabemuster zu erzwingen oder die Daten zu validieren.
Nehmen wir beispielsweise an, Sie möchten eine britische Sozialversicherungsnummer (National Insurance Number, NIN) abfragen. Diese hat folgendes Muster: 2 Zeichen, gefolgt von 6 Ziffern und einem weiteren Zeichen. Ein regulärer Ausdruck, der diesem Muster entspricht, wäre:
[az|AZ]{2}[0-9]{6}[az|AZ]
Hier bedeutet [az] „beliebiger Kleinbuchstabe“, [AZ] bedeutet „beliebiger Großbuchstabe“, | bedeutet „oder“, also bedeutet [az|AZ] „beliebiges Zeichen“, {2} bedeutet „zweimal wiederholen“ usw.
Manche Regierungen stellen reguläre Ausdrücke für häufig verwendete Muster bereit. Siehe beispielsweise diesen Wikipedia- Artikel über britische Postleitzahlen.
Für eine schnelle Übersicht über reguläre Ausdrücke suchen Sie nach einem „Leitfaden für reguläre Ausdrücke“ oder lesen Sie weiter.
Charakter | Legende | Beispiel | Beispielübereinstimmung |
|---|---|---|---|
\D | Die meisten Motoren: eine Ziffer | file_\d\d | Datei_25 |
\D | .NET, Python 3: Eine Unicode-Ziffer in jedem Skript | file_\d\d | file_9੩ |
\w | Die meisten Engines: „Wortzeichen“: ASCII-Buchstabe, Ziffer oder Unterstrich | \w-\w\w\w | A-b_1 |
\w | Python 3: „Wortzeichen“: Unicode-Buchstabe, -Ideogramm, -Ziffer oder -Unterstrich | \w-\w\w\w | 字-ま_۳ |
\w | .NET: „Wortzeichen“: Unicode-Buchstabe, -Ideogramm, -Ziffer oder -Verbindungszeichen. | \w-\w\w\w | 字-ま‿۳ |
\S | Die meisten Engines: „Leerzeichen“: Leerzeichen, Tabulator, Zeilenumbruch, Wagenrücklauf, vertikaler Tabulator | a\sb\sc | ab |
\S | .NET, Python 3, JavaScript: "Leerzeichen": beliebiges Unicode-Trennzeichen | a\sb\sc | ab |
\D | Ein Zeichen, das keine Ziffer im Sinne der Definition Ihres Systems ist (\d). | \D\D\D | ABC |
\W | Ein Zeichen, das kein Wortzeichen im Sinne der Definition Ihrer Engine ist (\w). | \W\W\W\W\W | *-+=) |
\S | Ein Zeichen, das kein Leerzeichen im Sinne der Definition Ihres Systems ist (\s). | \S\S\S\S | Jojo |
Quantoren
Quantor | Legende | Beispiel | Beispielübereinstimmung |
|---|---|---|---|
+ | Ein oder mehrere | Version \w-\w+ | Version A-b1_1 |
{3} | Genau dreimal | \D{3} | ABC |
{2,4} | Zwei- bis viermal | \d{2,4} | 156 |
{3,} | Drei oder mehr Male | \w{3,} | Regex-Tutorial |
* | Null oder mehr Male | ABC* | AAACC |
? | Einmal oder gar nicht | Pluralformen? | Plural |
Weitere Charaktere
Charakter | Legende | Beispiel | Beispielübereinstimmung |
|---|---|---|---|
Die | Beliebiges Zeichen außer Zeilenumbruch | Klimaanlage | ABC |
Die | Beliebiges Zeichen außer Zeilenumbruch | .* | Egal, Mann. |
. | Ein Punkt (Sonderzeichen: muss mit einem Backslash maskiert werden) | a\.c | Klimaanlage |
\ | Entkommt einer besonderen Figur | \.\*\+\? \$\^\/\\ | .*+? $^/\ |
\ | Entkommt einer besonderen Figur | \[\{\(\)\}\] | [{()}] |
Logik
Logik | Legende | Beispiel | Beispielübereinstimmung |
|---|---|---|---|
| | Alternative / ODER Operand | 22|33 | 33 |
( … ) | Erfassungsgruppe | A(nt|pple) | Apple (erfasst "Pfeife") |
1 | Inhalt der Gruppe 1 | r(\w)g\1x | regulärer Ausdruck |
2 | Inhalte der Gruppe 2 | (\d\d)\+(\d\d)=\2\+\1 | 12 + 65 = 65 + 12 |
(?: … ) | Nicht-Erfassungsgruppe | A(?:nt|pple) | Apfel |
Mehr Leerraum
Charakter | Legende | Beispiel | Beispielübereinstimmung |
|---|---|---|---|
\T | Tab | T\t\w{2} | T ab |
\R | Wagenrücklaufzeichen | siehe unten | |
\N | Zeilenvorschubzeichen | siehe unten | |
\r\n | Linientrenner unter Windows | AB\r\nCD | AB |
\N | Perl, PCRE (C, PHP, R…): ein Zeichen, das kein Zeilenumbruch ist | \N+ | ABC |
\H | Perl, PCRE (C, PHP, R…), Java: ein horizontales Leerzeichen: Tabulator oder Unicode-Leerzeichen | ||
\H | Ein Zeichen, das kein horizontaler Leerraum ist | ||
\v | .NET, JavaScript, Python, Ruby: vertikaler Tab | ||
\v | Perl, PCRE (C, PHP, R…), Java: ein vertikales Leerzeichen: Zeilenvorschub, Wagenrücklauf, vertikaler Tabulator, Seitenvorschub, Absatz- oder Zeilentrennzeichen | ||
\V | Perl, PCRE (C, PHP, R…), Java: jedes Zeichen, das kein vertikaler Leerraum ist | ||
\R | Perl, PCRE (C, PHP, R…), Java: ein Zeilenumbruch (Wagenrücklauf + Zeilenvorschubpaar und alle Zeichen, die durch \v übereinstimmen) |
Weitere Quantifizierer
Quantor | Legende | Beispiel | Beispielübereinstimmung |
|---|---|---|---|
+ | Das + (eins oder mehrere) bedeutet "gierig". | \d+ | 12345 |
? | Macht Quantoren "faul" | \d+? | 1 von 1 2345 |
* | Das * (null oder mehr) bedeutet „gierig“. | A* | AAA |
? | Macht Quantoren "faul" | A*? | leer in AAA |
{2,4} | Zwei- bis viermal, „gierig“ | \w{2,4} | abcd |
? | Macht Quantoren "faul" | \w{2,4}? | ab in ab cd |
Charakterklassen
Charakter | Legende | Beispiel | Beispielübereinstimmung |
|---|---|---|---|
[ … ] | Eines der Zeichen in den Klammern | [AEIOU] | Ein Großbuchstabe |
[ … ] | Eines der Zeichen in den Klammern | T[ao]p | Tippen oder Top |
- | Bereichsanzeige | [az] | Ein Kleinbuchstabe |
[xy] | Eines der Zeichen im Bereich von x bis y | [AZ]+ | GROSSARTIG |
[ … ] | Eines der Zeichen in den Klammern | [AB1-5w-z] | Eines der folgenden: A, B, 1, 2, 3, 4, 5, w, x, y, z |
[xy] | Eines der Zeichen im Bereich von x bis y | [ -~]+ | Zeichen im druckbaren Teil der ASCII-Tabelle . |
[^x] | Ein Zeichen, das nicht x ist | [^az]{3} | A1! |
[^xy] | Eines der Zeichen, das nicht im Bereich von x bis y liegt. | [^ -~]+ | Zeichen, die nicht im druckbaren Teil der ASCII-Tabelle enthalten sind. |
[\d\D] | Ein Zeichen, das eine Ziffer oder ein Nicht-Ziffernzeichen ist. | [\d\D]+ | Alle Zeichen, einschließlich |
[\x41] | Entspricht dem Zeichen an der hexadezimalen Position 41 in der ASCII-Tabelle, d. h. A | [\x41-\x45]{3} | ABE |
Anker und Grenzen
Anker | Legende | Beispiel | Beispielübereinstimmung |
|---|---|---|---|
^ | Zeichenkettenanfang oder Zeilenanfang, abhängig vom Mehrzeilenmodus. (Aber wenn [^ innerhalb von Klammern] steht, bedeutet es „nicht“.) | ^abc .* | abc (Zeilenanfang) |
$ | Zeichenkettenende oder Zeilenende , abhängig vom Mehrzeilenmodus. Viele vom jeweiligen Engine abhängige Feinheiten. | .*? das Ende$ | Dies ist das Ende. |
\A | Anfang der Zeichenkette | \Aabc[\d\D]* | abc (Zeichenkette... |
\z | ganz Ende der Schnur | das Ende | Dies ist... das Ende |
\Z | Ende der Zeichenkette oder (außer in Python) vor dem letzten Zeilenumbruch | das Ende\Z | Dies ist...\n... das Ende \n |
\G | Anfang der Zeichenkette oder Ende der vorherigen Übereinstimmung | ||
\B | Wortgrenze | Bob.*\bcat\b | Bob aß die Katze |
\B | Wortgrenze | Bob.*\b\кошка\b | Bob aß die Koschka |
\B | c.*\Bcat\B.* | Nachahmer |