Formulareingaben über Reguläre Ausdrücke validieren

Nutzbar ab: Version

Eingaben, die durch Benutzer auf der Webseite in Formularen gemacht werden, können neben den Standardvalidatoren auch über Reguläre Ausdrücke validiert werden.

Eingaben, die durch Benutzer auf der Webseite in Formularen gemacht werden, können neben den Standardvalidatoren auch über Reguläre Ausdrücke validiert werden. Dadurch haben Sie die Möglichkeit, jeden beliebigen Validator selbst zu definieren.

Neben den Standardvalidatoren, wie z.B. required, email oder isoDate stehen Ihnen auch folgende Validatoren, zur Prüfung über Reguläre Ausdrücke zur Verfügung:

  • pregMatch('REGEXP')
    Dieser Validator prüft, ob die Eingabe dem definierten Regulären Ausdruck entspricht und berücksichtigt dabei die Groß-/Kleinschreibung.
  • pregiMatch('REGEXP')
    Dieser Validator prüft, ob die Eingabe dem definierten Regulären Ausdruck entspricht, ohne dabei die Groß-/Kleinschreibung zu berücksichtigen.
  • preguMatch('REGEXP')
    Dieser Validator prüft, ob die Eingabe dem definierten Regulären Ausdruck entspricht, berücksichtigt dabei die Groß-/Kleinschreibung und behandelt die zu prüfenden Zeichenketten als UTF-8.
    (verfügbar ab CMS-Version 016.002.001.000)
  • pregiuMatch('REGEXP')
    Dieser Validator prüft, ob die Eingabe dem definierten Regulären Ausdruck entspricht, ohne dabei die Groß-/Kleinschreibung zu berücksichtigen und behandelt die zu prüfenden Zeichenketten als UTF-8.
    (verfügbar ab CMS-Version 016.002.001.000)
  • pregMatchOrEmpty('REGEXP')
    Dieser Validator prüft, ob die Eingabe dem definierten Regulären Ausdruck entspricht oder leer ist und berücksichtigt dabei die Groß-/Kleinschreibung
  • pregiMatchOrEmpty('REGEXP')
    Dieser Validator prüft, ob die Eingabe dem definierten Regulären Ausdruck entspricht oder leer ist, ohne dabei die Groß-/Kleinschreibung zu berücksichtigen
  • !pregMatch('REGEXP')
    Dieser Validator prüft, ob die Eingabe dem definierten Regulären Ausdruck nicht entspricht und berücksichtigt dabei die Groß-/Kleinschreibung
  • !pregiMatch('REGEXP')
    Dieser Validator prüft, ob die Eingabe dem definierten Regulären Ausdruck nicht entspricht, ohne dabei die Groß-/Kleinschreibung zu berücksichtigen
  • !preguMatch('REGEXP')
    Dieser Validator prüft, ob die Eingabe dem definierten Regulären Ausdruck nicht entspricht, berücksichtigt dabei die Groß-/Kleinschreibung und behandelt die zu prüfenden Zeichenketten als UTF-8.
    (verfügbar ab CMS-Version 016.002.001.000)
  • !pregiuMatch('REGEXP')
    Dieser Validator prüft, ob die Eingabe dem definierten Regulären Ausdruck nicht entspricht, ohne dabei die Groß-/Kleinschreibung zu berücksichtigen und behandelt die zu prüfenden Zeichenketten als UTF-8.
    (verfügbar ab CMS-Version 016.002.001.000)
  • callback:wMyProject::validateInput
    Dieser Validator prüft über Callback und die in wMyProject.php hinterlegte Funktion (im Beispiel validateInput) auf die dort definierten Regeln.

Weitere Validatoren:

  • isEqualInput(FELDNAME)
    Dieser Validator prüft, ob die Eingabe im Feld dem in Klammer angegebenen anderen Feld entspricht.
    Dies kann z.B. zum Abgleich von Feldern mit E-Mail Adressen oder Passwörtern nützlich sein.


Beispiele für Validatoren mit Regulären Ausdrücken

  • Prüfen, ob die Eingabe ein deutsches Datum ist
    pregMatch('^\d\d\.\d\d\.\d\d\d\d$')
  • Prüfen, ob die Eingabe leer oder ein deutsches Datum ist
    pregMatch('^(\d\d\.\d\d\.\d\d\d\d)?$')
  • Prüfen, ob die Eingabe mit http:// oder https:// beginnt
    pregMatch('^https?\:\/\/')
  • Prüfen, ob ein Feld nicht leer ist oder die Eingabe ohne http:// oder https:// beginnt
    !pregiMatch('^(|https?\:\/\/.*)$')
  • Prüfen, ob die Eingabe leer oder nur bestimmte Zeichen enthält (http(s):// daher nicht möglich)
    pregiMatch('^(|[a-zA-Z0-9\-\.\:]+)$')
  • Prüfen, ob der Satz "Ich stimme zu" eingegeben wurde
    pregiMatch('ich\s+stimme\s+zu')
  • Prüfen, ob die Eingabe keine Großbuchstaben enthält
    !pregMatch('[A-Z]')
  • Prüfen, ob die Eingabe kein Markup enthält
    !pregMatch('<|>')
  • Prüft, ob eine beliebige Ganzzahl (einmal oder beliebig oft) eingegeben wurde
    pregMatch('^\d+$')
  • Prüft, ob eine 4- oder 5-stellige Ziffer (z.B. Postleitzahl) eingegeben wurde
    pregMatch('^\d{4,5}$')
  • Prüft, ob die Eingabe leer oder eine 5-stellige Ziffer (z.B. Postleitzahl) ist
    pregMatch('^(|\d{4,5})$')
  • Prüfen, ob eine 13-stellige Ziffer eingegeben wurde
    pregiMatch('^\d{13}$')
  • Prüfen, ob eine Ganzzahl von 0 bis 4 eingegeben wurde
    pregMatch('^[0-4]$')
  • Prüfen, ob eine Ganzzahl mit Mindestwert 50 eingegeben wurde
    pregMatch('^(50|[5-9][0-9]|[1-9][0-9]{2,})$')
    (z.B. für Formularfelder nützlich, welche eine Mindestbestellwert für Gutscheine erfordern (z.B. 50 Euro))
  • Prüfen, ob eine Telefonnummer eingegeben wurde (z.B. +49 123-4567 oder +49 123 4567)
    pregMatch('^\+\d(?:[\s\-]?\d+)*$')
    Die Telefonnummer muß mit einem Plus-Zeichen beginnen und darf dann nur Zahlen, Leerzeichen und Bindestriche enthalten (mehrere aufeinanderfolgende Leerzeichen sind nicht erlaubt).
    Zu beachten ist, dass diese einfache RegEx-Überprüfung keine Aussagen darüber macht, ob die Telefonnummer tatsächlich existiert oder eine realistische Formatierung aufweist – sie prüft nur die allgemeine Struktur basierend auf den Vorgaben.
  • Prüfen, ob eine deutsche IBAN (22 Zeichen) eingegeben wurde
    pregMatch('^DE\d{2}\d{18}$')
    Der reguläre Ausdruck prüft nur das Format der IBAN, nicht deren tatsächliche Gültigkeit!
    Weitergehende Prüfungen (z.B. IBANs unterschiedlicher Länder, etc.) können z.B. über eine eigene callback-Funktion (z.B. callback:wMyProject::validateInput wie weiter oben angeführt) umgesetzt werden.
  • Prüfen, ob ein Name eingegeben wurde
    pregiuMatch('^[\p{L}\s'-]+$')
    Zu beachten ist, dass es spezielle Fälle oder kulturelle Unterschiede geben kann, die besondere Zeichen in Namen erlauben und somit individuell berücksichtigt werden müssen.

Sollten Sie einen speziellen Validator benötigen, helfen wir Ihnen gerne, diesen zu definieren.

Beispiele für Validatoren mit Regulären Ausdrücken im Formularquelltext

Beispiel 1: Wert darf im Feld nicht vorkommen

<!--
  Auszug aus kontakt/index.php:
  Versand ist nur möglich, wenn im Feld Nachname (lastname) nicht "mustermann" eingegeben wurde.
-->
...
<wd:fragment id="serverEventOnBeforeBuild" type="text.script">
<![CDATA[$this->elements['lastname']->validators[0]['type'] = "!pregiMatch('mustermann')";
$this->elements['lastname']->validators[0]['errorMessage'] = "Dieser Begriff darf nicht angegeben werden!";]]>
</wd:fragment>
...

Hinweis

Das Formular-Weblic® unterstützt ab Version 002.000.124.000 das Setzen eines eigenen Validators (als RegEx) über den Formulareditor zum Feld "Vorgaben".
z.B.: Eigener Validator: !pregiMatch('mustermann')

FAQs
Wie kann ich Formular-Eingaben über reguläre Ausdrücke validieren?
Man kann neben Standardvalidatoren eigene Validatoren auf Basis von regulären Ausdrücken (REGEXP) definieren. Dazu wird der passende Validator-Typ mit einem RegExmuster verwendet, z.B. mit <code class="codeInline">pregMatch('REGEXP')</code> oder <code class="codeInline">pregiMatch('REGEXP')</code>.
Welche Standardvalidatoren werden durch eigene REGEXP-Validatoren ergänzt?
Die Seite nennt als Beispiele für Standardvalidatoren u.a. <code class="codeInline">required</code>, <code class="codeInline">email</code> und <code class="codeInline">isoDate</code>. Zusätzlich stehen weitere REGEXP-basierte Validatoren zur Verfügung.
Was macht <code class="codeInline">pregMatch('REGEXP')</code> bei der Validierung?
Dieser Validator prüft, ob die Eingabe dem definierten regulären Ausdruck entspricht und berücksichtigt dabei die Groß-/Kleinschreibung.
Was macht <code class="codeInline">pregiMatch('REGEXP')</code>?
Dieser Validator prüft, ob die Eingabe dem definierten regulären Ausdruck entspricht, berücksichtigt dabei aber keine Groß-/Kleinschreibung.
Was ist der Unterschied zwischen <code class="codeInline">preguMatch</code> und <code class="codeInline">pregiMatch</code>?
- <code class="codeInline">preguMatch('REGEXP')</code> berücksichtigt Groß-/Kleinschreibung und behandelt die Eingaben als UTF-8 (verfügbar ab CMS-Version 016.002.001.000). - <code class="codeInline">pregiMatch('REGEXP')</code> ignoriert die Groß-/Kleinschreibung, ohne dass hier explizit UTF-8-Behandlung genannt wird.
Was ist der Unterschied zwischen <code class="codeInline">pregiuMatch</code> und <code class="codeInline">preguMatch</code>?
<code class="codeInline">pregiuMatch('REGEXP')</code> prüft ohne Groß-/Kleinschreibung und behandelt die Zeichen als UTF-8 (verfügbar ab CMS-Version 016.002.001.000). <code class="codeInline">preguMatch('REGEXP')</code> hingegen berücksichtigt Groß-/Kleinschreibung (und behandelt ebenfalls als UTF-8).
Wofür ist <code class="codeInline">pregMatchOrEmpty('REGEXP')</code> gedacht?
Dieser Validator prüft, ob die Eingabe dem regulären Ausdruck entspricht **oder leer** ist. Dabei wird die Groß-/Kleinschreibung berücksichtigt.
Was macht <code class="codeInline">pregiMatchOrEmpty('REGEXP')</code>?
Dieser Validator prüft, ob die Eingabe dem regulären Ausdruck entspricht **oder leer** ist, ignoriert dabei aber die Groß-/Kleinschreibung.
Wie validiere ich, dass ein Muster **nicht** vorkommen darf?
Dafür gibt es Validatoren mit Negation, z.B. <code class="codeInline">!pregMatch('REGEXP')</code> (nicht matchend, Groß-/Kleinschreibung wird berücksichtigt) oder <code class="codeInline">!pregiMatch('REGEXP')</code> (nicht matchend, Groß-/Kleinschreibung wird ignoriert).
Was bedeutet <code class="codeInline">!preguMatch('REGEXP')</code> bzw. <code class="codeInline">!pregiuMatch('REGEXP')</code>?
- <code class="codeInline">!preguMatch('REGEXP')</code>: prüft Negation, berücksichtigt Groß-/Kleinschreibung und behandelt die Zeichenketten als UTF-8 (ab CMS-Version 016.002.001.000). - <code class="codeInline">!pregiuMatch('REGEXP')</code>: prüft Negation, ignoriert Groß-/Kleinschreibung und behandelt als UTF-8 (ab CMS-Version 016.002.001.000).
Was macht der Callback-Validator <code class="codeInline">callback:wMyProject::validateInput</code>?
Dieser Validator führt eine Prüfung über einen Callback aus. Dabei wird auf die in <code class="codeInline">wMyProject.php</code> hinterlegte Funktion (z.B. <code class="codeInline">validateInput</code>) mit den dort definierten Regeln verwiesen.
Wofür ist <code class="codeInline">isEqualInput(FELDNAME)</code> nützlich?
Dieser Validator prüft, ob die Eingabe im aktuellen Feld dem Inhalt des in Klammern angegebenen anderen Feldes entspricht. Das ist z.B. für Abgleiche von E-Mail-Adressen oder Passwörtern nützlich.
Wie kann ich ein deutsches Datum per RegEx validieren?
Beispiel: <code class="codeInline">pregMatch('^\d\d\.\d\d\.\d\d\d\d$')</code>. Das Muster prüft dabei das Format <code class="codeInline">TT.MM.JJJJ</code>.
Wie validiert man „leer oder deutsches Datum“?
Beispiel: <code class="codeInline">pregMatch('^(\d\d\.\d\d\.\d\d\d\d)?$')</code>. Dadurch ist das Feld entweder leer oder entspricht einem deutschen Datumsformat.
Wie prüfe ich, ob ein Feld mit <code class="codeInline">http://</code> oder <code class="codeInline">https://</code> beginnt?
Beispiel: <code class="codeInline">pregMatch('^https?:\/\/')</code>. Damit wird geprüft, ob es mit <code class="codeInline">http://</code> oder <code class="codeInline">https://</code> startet.
Wie prüfe ich, dass die Eingabe nicht leer ist oder ohne <code class="codeInline">http://</code> bzw. <code class="codeInline">https://</code> beginnt?
Beispiel: <code class="codeInline">!pregiMatch('^(|https?:\/\/.*)$')</code>. Die Idee ist: entweder ist die Eingabe nicht leer und/oder sie soll nicht mit <code class="codeInline">http://</code>/<code class="codeInline">https://</code> beginnen.
Wie kann ich prüfen, dass nur bestimmte Zeichen erlaubt sind (z.B. ohne „http(s)://“)?
Beispiel: <code class="codeInline">pregMatch('^(|[a-zA-Z0-9\-\.\:]+)$')</code>. Das erlaubt im Beispiel nur (optional leer) Buchstaben/Zahlen sowie die Zeichen <code class="codeInline">- . :</code>.
Wie kann ich prüfen, ob die Eingabe genau „Ich stimme zu“ enthält?
Beispiel: <code class="codeInline">pregMatch('ich\s+stimme\s+zu')</code>. Das erlaubt zwischen den Wortteilen beliebige Leerzeichen (<code class="codeInline">\s+</code>).
Wie validiert man, dass keine Großbuchstaben vorkommen?
Beispiel: <code class="codeInline">pregMatch('[A-Z]')</code> (negativ gemeint im Beispielkontext: „Eingabe kein Markup“ bzw. „keine Großbuchstaben“). Für „keine Großbuchstaben“ verwendet man typischerweise eine Negation wie <code class="codeInline">!pregMatch('[A-Z]')</code> bzw. ein passendes Negativmuster, abhängig vom gewünschten Verhalten.
Wie kann ich prüfen, dass kein Markup (z.B. <code class="codeInline"><</code> oder <code class="codeInline">></code>) enthalten ist?
Beispiel (aus dem Text): <code class="codeInline">pregMatch('&lt;|&gt;')</code>. Dabei wird geprüft, ob (entsprechend dem Muster) Zeichen für <code class="codeInline"><</code> oder <code class="codeInline">></code> vorkommen; je nach Ziel („darf nicht vorkommen“) wird üblicherweise mit einem negierten Validator gearbeitet.
Kann ich eine Ganzzahl auf Basis eines RegEx prüfen?
Ja. Beispiele: - Nur Ganzzahl (einmal oder beliebig oft): <code class="codeInline">pregMatch('^\d+$')</code> - Nur 4- oder 5-stellige Zahl (z.B. PLZ): <code class="codeInline">pregMatch('^\d{4,5}$')</code>
Wie prüfe ich, dass eine Eingabe leer oder eine 5-stellige Ziffer ist?
Beispiel: <code class="codeInline">pregMatch('^(|\d{4,5})$')</code>. Damit sind leerer String oder eine 4- bis 5-stellige Zahl erlaubt.
Wie prüfe ich eine 13-stellige Ziffer?
Beispiel: <code class="codeInline">pregMatch('^\d{13}$')</code>. Das Muster erlaubt genau 13 Ziffern.
Wie prüfe ich, dass eine Ganzzahl nur den Bereich 0 bis 4 abdeckt?
Beispiel: <code class="codeInline">pregMatch('^[0-4]$')</code>. Das erlaubt genau eine Ziffer von 0 bis 4.
Wie prüfe ich, dass eine Ganzzahl mindestens 50 ist?
Beispiel: <code class="codeInline">pregMatch('^(50|[5-9][0-9]|[1-9][0-9]{2,})$')</code> (im Text als Beispiel für Felder mit Mindestbestellwert). Das Muster erlaubt Werte ab 50 gemäß der genannten Struktur.
Wie kann ich eine Telefonnummer per RegEx prüfen?
Beispiel: <code class="codeInline">pregMatch('^\+\d(?:[\s\-]?\d)*$')</code>. Laut Text: - muss mit <code class="codeInline">+</code> beginnen - danach nur Zahlen, Leerzeichen und Bindestriche - mehrere aufeinanderfolgende Leerzeichen sind nicht erlaubt (bei der beschriebenen einfachen Prüfung) Wichtig: Es wird nur die allgemeine Struktur geprüft, nicht ob die Nummer tatsächlich existiert oder realistisch formatiert ist.
Wie validiere ich eine deutsche IBAN per RegEx?
Beispiel: <code class="codeInline">pregMatch('^DE\d{2}\d{18}$')</code>. Das prüft nur das Format (22 Zeichen) und nicht die tatsächliche Gültigkeit. Für weitergehende Prüfungen kann z.B. ein Callback wie <code class="codeInline">callback:wMyProject::validateInput</code> eingesetzt werden.
Wie kann ich einen Namen per RegEx validieren (inkl. Unicode)?
Beispiel: <code class="codeInline">pregiuMatch('^[\p{L}\s\'-]+$')</code> (im Text als Beispiel mit Hinweis zu kulturellen Unterschieden). Dabei werden u.a. Buchstaben (<code class="codeInline">\p{L}</code>) und Leerzeichen sowie <code class="codeInline">'</code> und <code class="codeInline">-</code> berücksichtigt. Abhängig von Kultur/Schreibweisen können Sonderfälle besondere Anpassungen erfordern.
Kann ich Validatoren als RegEx auch direkt im Formularquelltext setzen?
Ja. Die Seite zeigt ein Beispiel über einen Formulareditor-/Event-Auszug, bei dem im Quelltext ein Validator-Typ gesetzt wird, z.B. <code class="codeInline">!pregiMatch('mustermann')</code> und eine passende <code class="codeInline">errorMessage</code>.
Was besagt der Hinweis „Setzen eines eigenen Validators (als RegEx) über den Formulareditor“?
Der Hinweis sagt, dass das Setzen eines eigenen Validators (als RegEx) über den Formulareditor zum Feld „Vorgaben“ unterstützt wird (im Text wird als Beispiel der eigene Validator <code class="codeInline">!pregiMatch('mustermann')</code> genannt).
Kann die Seite spezielle Validatoren für mich definieren?
Ja. Im Text steht, dass man bei Bedarf einen speziellen Validator definieren kann und „helfen Ihnen gerne, diesen zu definieren“.