Actions

Using regular expressions/nl: Difference between revisions

From LimeSurvey Manual

(Created page with "<nowiki>Om het minimum te wijzigen, wijzig de 0 in {0,199}")
(Created page with "Om het maximum te wijzigen, wijzig de "199" in {0,199}</nowiki>")
Line 256: Line 256:
  <nowiki>Om het minimum te wijzigen, wijzig de 0 in {0,199}
  <nowiki>Om het minimum te wijzigen, wijzig de 0 in {0,199}


To increase or decrease the maximum change the "199" part of {0,199}</nowiki>
Om het maximum te wijzigen, wijzig de "199" in {0,199}</nowiki>


=Tijd validatie=
=Tijd validatie=

Revision as of 21:21, 4 August 2013

Een reguliere expressie moet beginnen en eindigen met een slash ("/"). Een bibliotheek met reguliere expressies kun je vinden op http://www.regexlib.net/. Kijk wel of in deze "patterns" de slashes al toegevoegd zijn.

Om je reguliere expressie te testen kun je dit gebruiken: regex tester.

Voeg goed werkende reguliere expressies hier toe!

Voorbeelden (elke voorbeeld is één regel):

BELANGRIJK: Reguliere expressie in conditie

Als je de reguliere expressies in de conditie editor gebruikt, voeg dan NIET de beide slashes toe.

E-mail validatie

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

De bovenstaande regex zal geen e-mailadres met "+" valideren, wat wel is toegestaan en wordt aanbevolen door Gmail. Een versie die de "+" wel toestaat:

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

Dit is volgens mij beter dan het origineel (ook omdat er "start van string" en "eind van string" tekens zijn toegevoegd), maar het is niet perfect. Het staat ook abc+++defg@somemail.office.com toe, de regex zou eigenlijk zo moeten zijn dat er maar een "+" teken is toegestaan.

Postcode

Australische Postcode

/^[0-9]{4}/

Braziliaanse Postcode

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

Canadese Postcode

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

VS Postal Code

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

Verenigd Koninkrijk Postcode

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

Dit is niet een erg goede regex, maar voor een betere validatie zou een veel complexere regex nodig zijn. Meer informatie: StackOverflow answer en Wikipedia.

Telefoonnummer

VS Telefoonnummer

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

of

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

De tweede versie zal werken voor alle Canadese en VS telefoonnummers die ook niet numerieke tekens bevat, inclusief

 . ( ) - (space)

De volgende telefoonnummers (waarbij 5 voor een willekeurig cijfer staat) zijn dan toegestaan.

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

Australisch telefoonnummer

De volgende voorbeelden dekken alle mogelijke Australische mobiele en vaste telefoonnummers inclusief het landnummer "+61":

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

Maar niet:

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

Haakjes, spaties en streepjes worden overgeslagen.

De 'PRECIES' versie komen overeen met de eerste 4 of 5 cijfers in een getal om er zeker van te zijn dat het geldige Australische getallen zijn.

De 'NIET PRECIES' controleren alleen het eerste en tweede cijfer, ze staan dus ongeldige getallen toe.

Alle Australische telefoonnummers (gebiedscode verplicht)

PRECIES

/^\(?(?:\+?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})$/

NIET PRECIES

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

Alle Australische telefoonnummers (alleen vaste, met verplichte gebiedscode)

PRECIES

/^\(?(?:\+?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}$/

NIET PRECIES

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

Nieuw Zuid Wales vast (gebiedscode optioneel)

PRECIES

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

NIET PRECIES

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

Telefoonnummers Victoria en Tasmanië vaste nummers (gebiedscode optioneel)

PRECIES

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

NIET PRECIES

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

Queensland vast (gebiedscode optioneel)

PRECIES

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

NIET PRECIES

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

Zuid Australië, Noordelijk Territorium, West Australië vaste telefoonnummers (gebiedscode optioneel)

PRECIES

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

NIET PRECIES

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

Alleen mobiel

PRECIES

/^(?:\+?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}$/

NIET PRECIES

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

Belgisch telefoonnummer

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

Belgisch mobiel telefoonnummer

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

Frans telefoonnummer

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

Frans mobiel telefoonnummer

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

Luxemburgs telefoonnummer

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

Luxemburgs mobiel telefoonnummer

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

Duitse marken (met optioneel plus of min)

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

Leeftijd validatie

Voorbeeld: Leeftijd 20-99

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

Voorbeeld: Leeftijd 18-35

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

Voorbeeld: Leeftijd 19-65

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

Getal validatie

Getal van 1 tot 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}$/ hetzelfde als boven, misschien iets sneller

Getal van 1 tot 999, 1.000 tot 999.999 tot 999.999.999

/^[1-9][0-9]{0,2}(?:\.[0-9]{3}){0,2}$/
accepteert getallen van 1 tot 999, 1.000 tot 999.999 tot 999.999.999 maar weigert 
999.1.1, 94.22.22, 999.1.22, 999.11.1, 999.1.333

Nummer validatie met optionele decimaal (voor een prijs)

/^([1][0-9][0-9]|[1-9][0-9]|[0-9])((\.)[0-9][0-9])?$/ accepteert getallen van 0 tor 199, met 2 optionele decimalen  optionnal

/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
forces two decimal points
accepts numbers from 1.00 to 999,999,999.00 with an optional comma delimiting thousands/millions
including all of the following: 1.00, 1,000.00 , 12,345.67 , 12345,02 , 123,456,468.00 , 1234566.00 , 123456789.00
but not 1,23.00 , 12,3.4 or 1234,43.04

/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}(?:\.[0-9]{2})?$/ same as above but the two decimal points are optional

Maand (1-12)

If you want to ask for the month a person was born you can validate the input as follows:

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

Minimum wijdte (in dit voorbeeld: 3)

/^.{3,}$/

Valuta

VS valuta (dollar teken en centen optioneel)

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

Zwitserse prijs

Een getal met twee cijfers na de decimale punt met het laatste cijfer ongelijk 0 en 5:

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

Valideren score

1-10

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

1-100

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

Tekst validatie

Meerdere korte vrije teksten ondersteunt nu geen minimum of maximum aantal antwoorden. Een alternatief is een lang vrije tekst te gebruiken met een regex.

De volgende test voor minstens 1 woord per regel voor minstens 3 regels en maximaal 10 regels.

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

Als je 5 woorden per regel wilt, dan kun je de eerste en laatste asterisk(*) wijzigen in {4,} bijvoorbeeld:

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

Als je een of meer woorden wilt per regel wilt tussen de 1 en 5 regels, dan kun je de inhoud van de laatste accolades wijzigen in 0,4 (je gebruikt 0 om de eerste regel al te vergelijken).

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

Woordentellen

De volgende beperkt het aantal toegestane woorden tot minimaal 1 en maximaal

/^[-\w]+(?:\W+[-\w]+){0,199}\W*$/
Om het minimum te wijzigen, wijzig de 0 in {0,199}

Om het maximum te wijzigen, wijzig de "199" in {0,199}

Tijd validatie

There are a number of ways of writing time formats. Some of the possible options are 12 hour or 24 hour, with seconds or without. Currently  (2009/04/06) LimeSurvey (v1.80plus) doesn't have a Time queston type so instead you can use "short free text" with one of the nine validation regular expressions below:

The following three validation strings test for 24 hour time (in order of appearences) 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]$/~/pp<span style="color:pp~De volgende drie zijn voor de  12 uur tijdsaanduiding, net als boven met seconden, optioneel met seconden en met verplicht seconden

/^(?">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))$/~/pp</span>pp~De volgende drie zijn voor zowel de 12 als 24 uuraanduiding net als boven met seconden, optioneel met seconden en met verplicht seconden

/^(?:(?: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](?<center>[0-5][0-9])? (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9](?</center>[0-5][0-9])? (?:[ap]m|[AP]M)|12:[0-5][0-9](?<center>[0-5][0-9])? (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9](?</center>[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])$/

Schuttingtaal filter

Om schuttingtaal in antwoorden te verwijderen:

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

Vervang "SCHUTTINGTAAL" met het woord dat u uit de antwoorden wilt filteren.

De \b zorgt ervoor dat woorden als "borstel" en "konterfeitsel" geaccepteerd worden als je "borst" en "kont" als schuttingtaal ziet. Dit werkt ook als je andere woorden, namen, enz. uit antwoorden wilt verwijderen.