Actions

Benutzung von regulären Ausdrücken

From LimeSurvey Manual

Revision as of 07:27, 21 July 2023 by Maren.fritz (talk | contribs) (Created page with "=Bewertung validieren=")

Reguläre Ausdrücke müssen am Anfang und Ende mit einem Schrägstrich ("/") umschlossen sein. Sie finden eine gute Bibliothek mit regulären Ausdrücken auf http://www.regexlib.net/. Diese Ausdrücke werden fast alle funktionieren, wenn Sie diese mit dem Schrägstrich einschließen.

Um Ihre RegEx zu testen, können Sie diesen RegEx-Tester verwenden.

"Bitte fügen Sie erfolgreich getestet reguläre Ausdrücke dieser Seite hinzu!"

Beispiele (beachten Sie, dass dies alles Einzeiler sind):


Wichtig: Reguläre Ausdrücke in Bedingungen

Beachten Sie, dass bei der Verwendung von regulären Ausdrücken im Bedingungseditor, der Anfangs-/Endschrägstrich NICHT benutzt werden darf.


E-Mail-Validierung

Update (12/2018): Da Domänennamen heutzutage nicht nur Sonderzeichen wie „ü“ enthalten können, sondern auch mehr als 3 Zeichen als Domänennamen wie .tech oder .company verwenden, prüft der folgende E-Mail-Regex nur, ob „@“ und „.“ existiert innerhalb der eingegebenen E-Mail-Adresse.

 
/^.+?@.+?\..+$/

Wenn Sie eine Adresse pro Zeile validieren möchten, gilt in einem mehrzeiligen Langtextfeld:

 
/^(((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\r\n)?\n?)+)*)$/

Bei dieser veralteten Regex ist der Domainname auf 3 Zeichen beschränkt, was nicht alle verfügbaren Domains abdeckt:

 
/^(\w[-._+\w]*\w@\w[-._\w]*\w\.\w{2,3})$/

Postleitzahlen

Australische Postleitzahlen:

/^[0-9]{4}/

Brasilianische Postleitzahlen

/^[0-9]{2}\.[0-9]{3}-[0-9]{3}$/

Kanadische Postleitzahlen

/^[a-zA-Z]\d{1}[a-zA-Z](\-| |)\d{1}[a-zA-Z]\d{1}$/

US-Postleitzahlen

/^[0-9]{5}([- /]?[0-9]{4})?$/

For the postal code to start with zero, use:

/^[0-9]{5}(?:-[0-9]{4})?$/

UK Postleitzahlen

/^[A-Z][A-Z]?[0-9][A-Z0-9]? ?[0-9][ABDEFGHJLNPQRSTUWXYZ]{2}$/i

Note that this is not very exact, and a more exact validation is much more complex. For example, see StackOverflow answer and Wikipedia for more information.

Französische Postleitzahlen

/(^[0-8]\d\d{3}$)|(^9[0-5]\d{3}$)|(^97[1-6]\d{2}$)|(^98[46-8]\d{2}$)/

Der obige Ausdruck ist sehr präzise und prüft, ob das französische Departement existiert (erste zwei Ziffern), einschließlich überseeischer Departements und überseeischer Gebiete (DOM-TOM).


Telefonnummern

US-Telefonnummern

/^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d{2}[- ]?\d{4}$/

oder

/^[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{4}[\(\)\.\- ]{0,}$/

Mit dieser zweiten Option werden alle kanadischen und US-amerikanischen Telefonnummern abgeglichen, die nicht-stellige Symbole enthalten, einschließlich:

 . ( ) - (space)

Dadurch können Sie Telefonnummern zuordnen, die wie folgt aussehen:

  • (555)555 5555
  • 555.555.5555
  • 555 555 5555
  • (555)-555-5555
  • 555-555-5555
  • 555555555

Australische Telefonnummern

Die folgenden Muster stimmen mit allen verschiedenen australischen Mobil- und Festnetznummern überein, auch mit der Ländervorwahl „+61“:

  • (02) 9123 6535
  • 03 1234-5345
  • 0412 345 678
  • +61 2 3456 789

Aber nicht:

  • 234 3450 234
  • a234 534 3432
  • 134567
  • 123456789013

Klammern, Leerzeichen und Bindestriche werden ignoriert.

Die hier aufgeführten „Sehr präzise:“-Versionen gleichen die ersten vier oder fünf Ziffern einer Zahl ab, um sicherzustellen, dass es sich um gültige australische Zahlen handelt.

Die Angabe „Nicht sehr präzise:“ stimmt nur mit der ersten und zweiten Ziffer überein und lässt daher möglicherweise ungültige Zahlen zu.

Alle australischen Telefonnummern (Mobil- und Festnetz – Vorwahl erforderlich)

Sehr präzise:

/^\(?(?:\+?61|0)(?:(?:2\)?[ -]?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])|3\)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])|7\)?[ -]?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)|8\)?[ -]?(?:5[ -]?[1-4]|6[ -]?[0-8]|[7-9][ -]?[0-9]))(?:[ -]?[0-9]){6}|4\)?[ -]?(?:(?:[01][ -]?[0-9]|2[ -]?[0-57-9]|3[ -]?[1-9]|4[ -]?[7-9]|5[ -]?[018])[ -]?[0-9]|3[ -]?0[ -]?[0-5])(?:[ -]?[0-9]){5})$/

Nicht sehr präzise:

/^(?:\+?61|0)[2-478](?:[ -]?[0-9]){8}$/

Alle australischen Telefonnummern (nur Festnetz – Vorwahl erforderlich)

Sehr präzise:

/^\(?(?:\+?61|0)(?:2\)?[ -]?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])|3\)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])|7\)?[ -]?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)|8\)?[ -]?(?:5[ -]?[1-4]|6[ -]?[0-8]|[7-9][ -]?[0-9]))(?:[ -]?[0-9]){6}$/

Nicht sehr präzise:

/^(?:\+?61|\(?0)[2378]\)?(?:[ -]?[0-9]){8}$/

Festnetznummern für New South Wales (Vorwahl optional)

Sehr präzise:

/^(?:\(?(?:\+?61|0)2\)?[ -]?)?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])(?:[ -]?[0-9]){6}$/

Nicht sehr präzise:

/^(?:\(?(?:\+?61|0)2\)?(?:[ -]?[0-9]){7}[0-9]$/

Viktorianische und tasmanische Festnetznummern (Vorwahl optional)

Sehr präzise:

/^(?:\(?(?:\+?61|0)3\)?[ -]?)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])(?:[ -]?[0-9]){6}$/

Nicht sehr präzise:

/^(?:\(?(?:\+?61|0)3\)?(?:[ -]?[0-9]){7}[0-9]$/

Festnetznummern in Queensland (Vorwahl optional)

Sehr präzise:

/^(?:\(?(?:\+?61|0)7\)?[ -]?)?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)(?:[ -]?[0-9]){6}$/

Nicht sehr präzise:

/^(?:\(?(?:\+?61|0)7\)?(?:[ -]?[0-9]){7}[0-9]$/

Festnetznummern für Südaustralien, Northern Territory, Westaustralien (Vorwahl optional)

Sehr präzise:

/^(?:\(?(?:\+?61|0)8\)?[ -]?)?(?:5[1-4]|6[0-8]|[7-9][0-9])$/

Nicht sehr präzise:

/^(?:\(?(?:\+?61|0)8\)?(?:[ -]?[0-9]){7}[0-9]$/

Nur australische Mobiltelefonnummern

Sehr präzise:

/^(?:\+?61|0)4 ?(?:(?:[01] ?[0-9]|2 ?[0-57-9]|3 ?[1-9]|4 ?[7-9]|5 ?[018]) ?[0-9]|3 ?0 ?[0-5])(?: ?[0-9]){5}$/

Nicht sehr präzise:

/^(?:\(?(?:\+?61|0)4\)?(?:[ -]?[0-9]){7}[0-9]$/

Belgische Telefonnummer

 /^((\+|00)32\s?|0)(\d\s?\d{3}|\d{2}\s?\d{2})(\s?\d{2}){2}$/

Belgische Mobiltelefonnummer

 /^((\+|00)32\s?|0)4(60|[789]\d)(\s?\d{2}){3}$/

Französische Telefonnummer

 /^((\+|00)33\s?|0)[1-59](\s?\d{2}){4}$/

Französische Mobiltelefonnummer

 /^((\+|00)33\s?|0)[67](\s?\d{2}){4}$/

Luxemburger Telefonnummer

 /^((\+|00\s?)352)?(\s?\d{2}){3,4}$/

Luxemburger Mobiltelefonnummer

 /^((\+|00\s?)352)?\s?6[269]1(\s?\d{3}){2}$/

Deutsche Zeichen (mit optionalem Plus oder Minus)

 /^[1-6]{1}[\+|\-]?$/


Altersvalidierung

Beispiel: Alter 20-99

 /([2-9][0-9])/

Beispiel: Alter 18-35

 /(1[8-9]|2[0-9]|3[0-5])/

Beispiel: Alter 19-65

 /^(1[8-9]|[2-5][0-9]|6[0-5])$/


Zahlenvalidierung

Zahlen von 1 bis 99999

 /^([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9])$/
 /^[1-9][0-9]{0,4}$/ macht das Gleiche wie oben, sollte aber etwas schneller laufen

Zahlen von 1 bis 999, 1.000 bis 999.999 bis 999.999.999

 /^[1-9][0-9]{0,2}(?:\.[0-9]{3}){0,2}$/

Akzeptiert Zahlen von 1 bis 999, 1.000 bis 999.999 bis 999.999.999, aber lehnt Zahlen wie 999.1.1, 94.22.22, 999.1.22, 999.11.1, 999.1.333 ab

Zahlenvalidierung mit optionaler Dezimalzahl (für Preis)

Akzeptiert Zahlen von 0 bis 199, mit 2 Dezimalstellen optional:

 /^([1][0-9][0-9]|[1-9][0-9]|[0-9])((\.)[0-9][0-9])?$/

Zahlenvalidierung mit Tausendertrennzeichen

Leerzeichen als Trennzeichen, kein Minus

 /^(?!0)\d{1,3}(\ \d{3})*$/

Punkt als Trennzeichen, Minus erlaubt

 /^-?(?!0)\d{1,3}(\.\d{3})*$/

Es erzwingt zwei Dezimalstellen und akzeptiert Zahlen von 1,00 bis 999.999.999,00 mit einem optionalen Komma zur Trennung von Tausendern/Millionen 3456789.00 aber nicht 1,23,00, 12,3,4 oder 1234,43,04

 /^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/

Ähnlich wie oben: Erzwingt zwei Dezimalstellen, akzeptiert aber eine „0“ vor dem Dezimaltrennzeichen ",".

 /[0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/

Wie oben, aber die beiden Dezimalstellen sind optional:

 /^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}(?:\.[0-9]{2})?$/

Monat (1-12)

Wenn Sie nach dem Geburtsmonat einer Person fragen möchten, können Sie die Eingabe wie folgt validieren:

/^[0]*[1-9]$|^[0]*1[0-2]$/

Mindestbreite (in diesem Beispiel auf 3 eingestellt)

/^.{3,}$/


Währung

US-Währung (Dollarzeichen und Cent optional)

/^\$?\d+(\.(\d{2}))?$/

Auf Kommaverwendung prüfen:

 /^\$?\d{1,3}(\d+(?!,))?(,\d{3})*(\.\d{2})?$/

Schweizer Preis

Eine Zahl mit zwei Nachkommazahlen, deren letzte entweder eine 5 oder eine 0 ist:

/^(\d+)(\.\d(05)?)?$/


Bewertung validieren

1-10

/^[1-9]{1}$|^10$/

1-100

/^[1-9]?[0-9]{1}$|^100$/


Text validation

The multiple short text question type doesn't support minimum or maximum answers at the moment. One way around this is to use a long free text question type with a regular expression.

The below expression tests for at least one word per line for at least 3 lines and no more than 10 lines:

/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){2,10}/is

If you want, say five words per line, you could change the first and last star/asterisk to {4,}:

/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})){2,10}/is

If you wanted one or more words per line (between line 1 and line 5), you can change the content located within the last curly braces to 0,4 (note you use 0 because you're already matching the first line).

/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){0,4}/is

Word count

The following restricts the number of words allowed to a minimum of 1 and a maximum of 200:
/^[-\w]+(?:\W+[-\w]+){0,199}\W*$/
To increase the minimum change the zero part of {0,199}.

To increase or decrease the maximum change the "199" part of {0,199}.

Time validation

There are a number of ways to write time formats. Some of the possible options are 12 hour or 24 hour, with seconds or without. Although it is an option to use the date question type (it can also capture time) you can use the short free text question type with one of the below validation regular expressions.

The following three validation strings test for 24 hour time (in order of appearances) without seconds, with optional seconds lastly with seconds required:

/^(?:[01][0-9]|2[0-3]):[0-5][0-9]$/
/^(?:[01][0-9]|2[0-3]):[0-5][0-9](?::[0-5][0-9])?$/
/^(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/

The following three match 12 hour time, as above with seconds, optional seconds and with seconds required:

/^(?">00:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9] (?:pm|PM))$/
/^(?:00:[0-5][0-9](?::[0-5][0-9])? (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9](?::[0-5][0-9])? (?:[ap]m|[AP]M)|12:[0-5][0-9](?::[0-5][0-9])? (?:pm|PM))$/
/^(?:00:[0-5][0-9]:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9]:[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9]:[0-5][0-9] (?:pm|PM))$/

The following three match either 12 or 24 hour time as above with seconds, optional seconds and with seconds required:

/^(?:(?:00:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9] (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9])$/
/^(?:(?:00:[0-5][0-9](?[0-5][0-9])? (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9](?[0-5][0-9])? (?:[ap]m|[AP]M)|12:[0-5][0-9](?[0-5][0-9])? (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9](?[0-5][0-9])?)$/
/^(?:(?:00:[0-5][0-9]:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9]:[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9]:[0-5][0-9] (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])$/

US states

To validate for one state use the following (example is Texas):

  • TX uppercase only:
    /^(TX)$/
    
  • tx lowercase only:
    /^(tx)$/
    
  • TX upper or lowercase:
    /^([T|t][X|x])$/
    


Profanity Filter

To filter profanity words from an answer:

/^(?i)((?!\bENTERPROFANITYHERE\b).)*$(?-i)/

Replace "ENTERPROFANITYHERE" with your bad word.

The \b will allow passing of words such as "assassination" and "hello" if you enter "ass" or "hell" as your profanity word. This also works if you are trying to omit other words, names etc. from answers.


Helpful links

In the beginning of this wiki section, we recommend you to use https://regex101.com/ to test/create regular expressions. You can also use https://www.regextester.com/ to create expressions in case you are unhappy about the first option. You can use https://extendsclass.com/regex-tester.html to visualize regular expressions.