Bruk av regulære uttrykk
From LimeSurvey Manual
Regulære uttrykk må starte og slutte med en skråstrek («/»). Du finner et godt bibliotek med regulære uttrykk på https://www.regexlib.net/. Disse mønstrene fungerer nesten alltid hvis de er omgitt av skråstreker.
For å teste ditt regulære uttrykk kan du bruke denne regex-testeren.
Viktig: Regulære uttrykk i betingelser
Merk at når du bruker regulære uttrykk i betingelseseditoren, skal du IKKE ta med skråstreken i begynnelsen og slutten.
Validering av e-post
Oppdatering (12/2018): Fordi domenenavn i dag ikke bare kan inneholde spesialtegn som «ü», men også bestå av mer enn 3 tegn i toppdomenet, som .tech eller .company, sjekker det nedenstående regulære uttrykket for e-post bare om «@» og «.» finnes i den oppgitte e-postadressen.
/^.+?@.+?\..+$/
Hvis du vil validere én adresse per linje i et flerlinjers langt tekstfelt:
/^(((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\r\n)?\n?)+)*)$/
I dette utdaterte regulære uttrykket er domenenavnet begrenset til 3 tegn, noe som ikke dekker alle tilgjengelige domener:
/^(\w[-._+\w]*\w@\w[-._\w]*\w\.\w{2,3})$/
Postnumre
Australske postnumre:
/^[0-9]{4}/
Brasilianske postnumre
/^[0-9]{2}\.[0-9]{3}-[0-9]{3}$/
Kanadiske postnumre
/^[a-zA-Z]\d{1}[a-zA-Z](\-| |)\d{1}[a-zA-Z]\d{1}$/
Amerikanske postnumre
/^[0-9]{5}([- /]?[0-9]{4})?$/
Hvis postnummeret skal kunne starte med null, bruk:
/^[0-9]{5}(?:-[0-9]{4})?$/
Britiske postnumre
/^[A-Z][A-Z]?[0-9][A-Z0-9]? ?[0-9][ABDEFGHJLNPQRSTUWXYZ]{2}$/i
Merk at dette ikke er særlig nøyaktig, og at en mer nøyaktig validering er mye mer kompleks. Se for eksempel StackOverflow-svaret og Wikipedia for mer informasjon.
Franske postnumre
/(^[0-8]\d\d{3}$)|(^9[0-5]\d{3}$)|(^97[1-6]\d{2}$)|(^98[46-8]\d{2}$)/
Uttrykket ovenfor er svært presist og sjekker om det franske departementet finnes (de to første sifrene), inkludert oversjøiske departementer og oversjøiske territorier (DOM-TOM).
Telefonnumre
Amerikanske telefonnumre
/^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d{2}[- ]?\d{4}$/
eller
/^[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{4}[\(\)\.\- ]{0,}$/
Dette andre alternativet samsvarer med alle kanadiske og amerikanske telefonnumre som inneholder andre tegn enn sifre, blant annet:
. ( ) - (space)
Dette lar deg samsvare med telefonnumre som ligner på disse:
- (555)555 5555
- 555.555.5555
- 555 555 5555
- (555)-555-5555
- 555-555-5555
- 555555555
Australske telefonnumre
Følgende mønstre samsvarer med alle typer australske mobil- og fasttelefonnumre, også med landskoden «+61»:
- (02) 9123 6535
- 03 1234-5345
- 0412 345 678
- +61 2 3456 789
Men ikke:
- 234 3450 234
- a234 534 3432
- 134567
- 123456789013
Parenteser, mellomrom og bindestreker ignoreres.
Versjonene merket «Svært presis:» som er oppført her, sjekker de første fire eller fem sifrene i et nummer for å sikre at det er gyldige australske numre.
Versjonene merket «Ikke svært presis:» sjekker bare det første og andre sifferet, og kan derfor tillate ugyldige numre.
Alle australske telefonnumre (mobil og fasttelefon – retningsnummer påkrevd)
Svært presis:
/^\(?(?:\+?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})$/
Ikke svært presis:
/^(?:\+?61|0)[2-478](?:[ -]?[0-9]){8}$/
Alle australske telefonnumre (kun fasttelefon – retningsnummer påkrevd)
Svært presis:
/^\(?(?:\+?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}$/
Ikke svært presis:
/^(?:\+?61|\(?0)[2378]\)?(?:[ -]?[0-9]){8}$/
Fasttelefonnumre i New South Wales (retningsnummer valgfritt)
Svært presis:
/^(?:\(?(?:\+?61|0)2\)?[ -]?)?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])(?:[ -]?[0-9]){6}$/
Ikke svært presis:
/^(?:\(?(?:\+?61|0)2\)?(?:[ -]?[0-9]){7}[0-9]$/
Fasttelefonnumre i Victoria og Tasmania (retningsnummer valgfritt)
Svært presis:
/^(?:\(?(?:\+?61|0)3\)?[ -]?)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])(?:[ -]?[0-9]){6}$/
Ikke svært presis:
/^(?:\(?(?:\+?61|0)3\)?(?:[ -]?[0-9]){7}[0-9]$/
Fasttelefonnumre i Queensland (retningsnummer valgfritt)
Svært presis:
/^(?:\(?(?:\+?61|0)7\)?[ -]?)?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)(?:[ -]?[0-9]){6}$/
Ikke svært presis:
/^(?:\(?(?:\+?61|0)7\)?(?:[ -]?[0-9]){7}[0-9]$/
Fasttelefonnumre i South Australia, Northern Territory og Western Australia (retningsnummer valgfritt)
Svært presis:
/^(?:\(?(?:\+?61|0)8\)?[ -]?)?(?:5[1-4]|6[0-8]|[7-9][0-9])$/
Ikke svært presis:
/^(?:\(?(?:\+?61|0)8\)?(?:[ -]?[0-9]){7}[0-9]$/
Kun australske mobilnumre
Svært presis:
/^(?:\+?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}$/
Ikke svært presis:
/^(?:\(?(?:\+?61|0)4\)?(?:[ -]?[0-9]){7}[0-9]$/
Belgisk telefonnummer
/^((\+|00)32\s?|0)(\d\s?\d{3}|\d{2}\s?\d{2})(\s?\d{2}){2}$/
Belgisk mobilnummer
/^((\+|00)32\s?|0)4(60|[789]\d)(\s?\d{2}){3}$/
Fransk telefonnummer
/^((\+|00)33\s?|0)[1-59](\s?\d{2}){4}$/
Fransk mobilnummer
/^((\+|00)33\s?|0)[67](\s?\d{2}){4}$/
Luxembourgsk telefonnummer
/^((\+|00\s?)352)?(\s?\d{2}){3,4}$/
Luxembourgsk mobilnummer
/^((\+|00\s?)352)?\s?6[269]1(\s?\d{3}){2}$/
Tyske karakterer (med valgfritt pluss eller minus)
/^[1-6]{1}[\+|\-]?$/
Validering av alder
Eksempel: Alder 20–99
/([2-9][0-9])/
Eksempel: Alder 18–35
/(1[8-9]|2[0-9]|3[0-5])/
Eksempel: Alder 19–65
/^(1[8-9]|[2-5][0-9]|6[0-5])$/
Validering av tall
Tall fra 1 til 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}$/ does the same as above but should run a little faster
Tall fra 1 til 999, 1.000 til 999.999 til 999.999.999
/^[1-9][0-9]{0,2}(?:\.[0-9]{3}){0,2}$/
Aksepterer tall fra 1 til 999, 1.000 til 999.999 til 999.999.999, men avviser tall som 999.1.1 , 94.22.22, 999.1.22, 999.11.1, 999.1.333
Tallvalidering med valgfri desimal (for pris)
Aksepterer tall fra 0 til 199, med valgfrie 2 desimaler:
/^([1][0-9][0-9]|[1-9][0-9]|[0-9])((\.)[0-9][0-9])?$/
Tallvalidering med tusenskilletegn
Mellomrom som skilletegn, ingen minus
/^(?!0)\d{1,3}(\ \d{3})*$/
Punktum som skilletegn, minus tillatt
/^-?(?!0)\d{1,3}(\.\d{3})*$/
Det tvinger frem to desimaler og aksepterer tall fra 1.00 til 999,999,999.00 med et valgfritt komma som skiller tusener/millioner og inkluderer alle følgende: 1.00, 1,000.00, 12,345.67, 12345,02, 123,456,468.00, 1234566.00, 123456789.00 men ikke 1,23.00, 12,3.4 eller 1234,43.04
/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
Likt det ovenstående: Tvinger frem to desimaler, men aksepterer et «0» foran desimalskilletegnet «,».
/[0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
Samme som over, men de to desimalene er valgfrie:
/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}(?:\.[0-9]{2})?$/
Måned (1-12)
Hvis du vil spørre om hvilken måned en person er født i, kan du validere svaret slik:
/^[0]*[1-9]$|^[0]*1[0-2]$/
Minimumsbredde (satt til 3 i dette eksempelet)
/^.{3,}$/
Valuta
Amerikansk valuta (dollartegn og cent valgfritt)
/^\$?\d+(\.(\d{2}))?$/
Kontroller bruk av komma:
/^\$?\d{1,3}(\d+(?!,))?(,\d{3})*(\.\d{2})?$/
Sveitsisk pris
Et tall med to desimaler etter desimaltegnet, der den siste enten er 5 eller 0:
/^(\d+)(\.\d(05)?)?$/
Validere poengsum
1-10
/^[1-9]{1}$|^10$/
1-100
/^[1-9]?[0-9]{1}$|^100$/
Tekstvalidering
Spørsmålstypen Flere korte tekstfelt støtter foreløpig ikke minimum eller maksimum antall svar. En løsning er å bruke spørsmålstypen Lang fritekst med et regulært uttrykk.
Uttrykket nedenfor tester for minst ett ord per linje på minst 3 linjer og høyst 10 linjer:
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){2,10}/is
Hvis du for eksempel vil ha fem ord per linje, kan du endre den første og den siste stjernen til {4,}:
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})){2,10}/is
Hvis du vil ha ett eller flere ord per linje (mellom linje 1 og linje 5), kan du endre innholdet i de siste krøllparentesene til 0,4 (merk at du bruker 0 fordi du allerede matcher første linje).
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){0,4}/is
Ordtelling
Følgende begrenser antall tillatte ord til minimum 1 og maksimum 200:
/^[-\w]+(?:\W+[-\w]+){0,199}\W*$/
For å øke minimum endrer du nulldelen av {0,199}.
For å øke eller redusere maksimum endrer du «199»-delen av {0,199}.
Tidsvalidering
Det finnes flere måter å skrive tidsformater på. Noen av alternativene er 12-timers eller 24-timers klokke, med eller uten sekunder. Selv om du kan bruke spørsmålstypen Dato (den kan også registrere tid), kan du bruke spørsmålstypen Kort fritekst med et av de følgende regulære uttrykkene for validering.
De følgende tre valideringsstrengene tester for 24-timers tid (i rekkefølge) uten sekunder, med valgfrie sekunder og til slutt med påkrevde sekunder:
/^(?:[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]$/
De følgende tre matcher 12-timers tid, som over med sekunder, valgfrie sekunder og med påkrevde sekunder:
/^(?">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))$/
De følgende tre matcher enten 12- eller 24-timers tid, som over med sekunder, valgfrie sekunder og med påkrevde sekunder:
/^(?:(?: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])$/
Amerikanske delstater
For å validere én delstat bruker du følgende (eksempelet er Texas):
- TX bare store bokstaver:
/^(TX)$/
- tx bare små bokstaver:
/^(tx)$/
- TX store eller små bokstaver:
/^([T|t][X|x])$/
Filter for banning
Slik filtrerer du bort banneord fra et svar:
/^(?i)((?!\bENTERPROFANITYHERE\b).)*$(?-i)/
Erstatt «ENTERPROFANITYHERE» med banneordet ditt.
\b gjør at ord som «assassination» og «hello» slipper gjennom hvis du skriver inn «ass» eller «hell» som banneord. Dette fungerer også hvis du vil utelate andre ord, navn osv. fra svar.
Nyttige lenker
Innledningsvis i denne wiki-delen anbefaler vi at du bruker https://regex101.com/ til å teste og opprette regulære uttrykk. Du kan også bruke https://www.regextester.com/ til å opprette uttrykk hvis du ikke er fornøyd med det første alternativet. Du kan bruke https://extendsclass.com/regex-tester.html til å visualisere regulære uttrykk.