Brug af regulære udtryk
From LimeSurvey Manual
Regulære udtryk skal starte og slutte med en skråstreg ("/"). Du kan finde et godt bibliotek af regulære udtryk på http://www.regexlib.net/. Disse mønstre vil næsten altid fungere, hvis de er omgivet af skråstreger.
For at teste dit regex kan du bruge denne regex-tester.
Vigtigt: Regulære udtryk i forhold
Bemærk, at når du bruger regulære udtryk i betingelseseditoren, skal du IKKE inkludere den begyndende og afsluttende skråstreg.
E-mail-validering
Opdatering (12/2018): Siden disse dage kan domænenavne ikke kun indeholde specialtegn som "ü", men også bruge mere end 3 tegn som domænenavn som .tech eller .company, nedenstående e-mail regex kontrollerer kun om "@" og "." findes inden for den indtastede e-mailadresse.
/^.+?@.+?\..+$/
Hvis du ønsker at validere én adresse pr. linje, i et flerlinjers langt tekstfelt:
/^(((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\r\ n)?\n?)+)*)$/
Ved dette forældede regex er domænenavnet begrænset til 3 tegn, hvilket ikke dækker alle tilgængelige domæner:
/^(\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}$/
Canadiske postnumre
/^[a-zA-Z]\d{1}[a-zA-Z](\-| |)\d{1}[a-zA-Z]\d{1}$/
US postnumre
/^[0-9]{5}([- /]?[0-9]{4})?$/
For at postnummeret starter med nul, skal du bruge:
/^[0-9]{5}(?:-[0-9]{4})?$/
UK postnumre
/^[AZ][AZ]?[0-9][A-Z0-9]? ?[0-9][ABDEFGHJLNPQRSTUWXYZ]{2}$/i
Bemærk, at dette ikke er særlig nøjagtigt, og en mere nøjagtig validering er meget mere kompleks. Se for eksempel StackOverflow-svar og Wikipedia for mere Information.
Franske postnumre
/(^[0-8]\d\d{3}$)|(^9[0-5]\d{3}$)|(^97[1-6]\d{2}$)| (^98[46-8]\d{2}$)/
Ovenstående udtryk er meget præcist, og det vil kontrollere, om det franske departement eksisterer eller ej (første to cifre), inklusive oversøiske departementer og oversøiske territorier (DOM-TOM).
Telefonnumre
USA 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,}$/
Denne anden mulighed vil matche alle telefonnumre i Canada og USA, der inkluderer ikke-cifrede symboler, herunder:
. ( ) - (mellemrum)
Dette giver dig mulighed for at matche telefonnumre, der ligner nedenfor:
- (555)555 5555
- 555.555.5555
- 555 555 5555
- (555)-555-5555
- 555-555-5555
- 555555555
Australske telefonnumre
Følgende mønstre matcher alle forskellige australske mobil- og fastnettelefonnumre, inklusive med "+61" landepræfiks:
- (02) 9123 6535
- 03 1234-5345
- 0412 345 678
- + 61 2 3456 789
Men ikke:
- 234 3450 234
- a234 534 3432
- 134567
- 123456789013
Brackets, mellemrum og hypens ignoreres.
De 'Meget præcise:' versioner, der er anført her, matcher de første fire eller fem cifre i et tal for at sikre, at de er gyldige australske numre.
'Ikke særlig præcis:' matcher kun det første og andet ciffer, så det kan tillade ugyldige tal.
Alle australske telefonnumre (mobil og fastnet - områdenummer påkrævet)
Meget præcis:
/^\(?(?:\+?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 særlig præcist:
/^(?:\+?61|0)[2-478](?:[ -]?[0-9]){8}$/
Alle australske telefonnumre (kun fastnet - områdenummer påkrævet)
Meget præcis:
/^\(?(?:\+?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 særlig præcist:
/^(?:\+?61|\(?0)[2378]\)?(?:[ -]?[0-9]){8}$/
New South Wales fastnettelefonnumre (valgfrit områdenummer)
Meget præcis:
/^(?:\(?(?:\+?61|0)2\)?[ -]?)?(?:3[ -]?[38]|[46-9][ -]?[ 0-9]|5[ -]?[0-35-9])(?:[ -]?[0-9]){6}$/
Ikke særlig præcist:
/^(?:\(?(?:\+?61|0)2\)?(?:[ -]?[0-9]){7}[0-9]$/
Victorianske og tasmanske fastnettelefonnumre (valgfrit områdenummer)
Meget præcis:
/^(?:\(?(?:\+?61|0)3\)?[ -]?)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])(?:[ -]?[0-9]){6}$/
Ikke særlig præcist:
/^(?:\(?(?:\+?61|0)3\)?(?:[ -]?[0-9]){7}[0-9]$/
Queensland-fastnettelefonnumre (valgfrit områdenummer)
Meget præcis:
/^(?:\(?(?:\+?61|0)7\)?[ -]?)?(?:[2-4][ -]?[0-9]|5[ -] ?[2-7]|7[ -]?6)(?:[ -]?[0-9]){6}$/
Ikke særlig præcist:
/^(?:\(?(?:\+?61|0)7\)?(?:[ -]?[0-9]){7}[0-9]$/
South Australia, Northern Territory, Western Australia fastnettelefonnumre (valgfrit områdenummer)
Meget præcis:
/^(?:\(?(?:\+?61|0)8\)?[ -]?)?(?:5[1-4]|6[0-8]|[7-9] [0-9])$/
Ikke særlig præcist:
/^(?:\(?(?:\+?61|0)8\)?(?:[ -]?[0-9]){7}[0-9]$/
kun australske mobiltelefonnumre
Meget præcis:
/^(?:\+?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 særlig præcist:
/^(?:\(?(?:\+?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 mobiltelefonnummer
/^((\+|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 mobiltelefonnummer
/^((\+|00)33\s?|0)[67](\s?\d{2}){4}$/
Luxemburgs telefonnummer
/^((\+|00\s?)352)?(\s?\d{2}){3,4}$/
Luxemburgs mobiltelefonnummer
/^((\+|00\s?)352)?\s?6[269]1(\s?\d{3}){2}$/
Tyske mark (med valgfrit plus eller minus)
/^[1-6]{1}[\+|\-]?$/
Aldersvalidering
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])$/
Nummervalidering
Numre 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}$/ gør det samme som ovenfor, men burde køre lidt hurtigere
Numre fra 1 til 999, 1.000 til 999.999 til 999.999.999
/^[1-9][0-9]{0,2}(?:\.[0-9]{3}){0,2}$/
Accepterer numre fra 1 til 999, 1.000 til 999.999 til 999.999.999, men
afviser numre som 999.1.1 , 94.22.22, 999.1.22, 999.139.1,.
Talvalidering med valgfri decimal (til pris)
Accepterer tal fra 0 til 199, med 2 decimaler valgfri:
/^([1][0-9][0-9]|[1-9][0-9]|[0-9])((\.)[0-9][0-9]) ?$/
Talvalidering med tusind-separator
Mellemrum som separator, ingen minus
/^(?!0)\d{1,3}(\ \d{3})*$/
Prik som skilletegn, minus tilladt
/^-?(?!0)\d{1,3}(\.\d{3})*$/
Den fremtvinger to decimaler og accepterer tal fra 1,00 til 999.999.999.00 med et valgfrit komma, der afgrænser tusinder/millioner inklusive alle følgende: 1.00, 1.000.00, 12.345.67, 12345,143,08, 52345, 52345, 526,00 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}$/
I lighed med ovenstående: Tvinger to decimaltegn, men accepterer et "0" før decimalskilletegn ",".
/[0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
Samme som ovenfor, men de to decimaler er valgfrie:
/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}(?:\.[0-9]{2}) ?$/
Måned (1-12)
Hvis du vil spørge om måneden, hvor en person blev født, kan du validere inputtet som følger:
/^[0]*[1-9]$|^[0]*1[0-2]$/
Minimumsbredde (indstillet til 3 i dette eksempel)
/^.{3,}$/
Valuta
US valuta (dollartegn og cent valgfrit)
/^\$?\d+(\.(\d{2}))?$/
Tjek for kommabrug:
/^\$?\d{1,3}(\d+(?!,))?(,\d{3})*(\.\d{2})?$/
Schweizisk pris
Et tal med to decimaltal efter decimalkommaet, hvor det sidste er enten 5 eller 0:
/^(\d+)(\.\d(05)?)?$/
Valider score
1-10
/^[1-9]{1}$|^10$/
1-100
/^[1-9]?[0-9]{1}$|^100$/
Tekstvalidering
multiple short text question type understøtter ikke minimum eller maksimum svar i øjeblikket. En måde at undgå dette på er at bruge en lang fritekstspørgsmålstype med et regulært udtryk.
Nedenstående udtryk tester for mindst ét ord pr. linje i mindst 3 linjer og ikke mere end 10 linjer:
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?! & \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^, .;:?!& \n\r]+)*)){2,10}/is
Hvis du vil sige fem ord pr. linje, kan du ændre den første og sidste stjerne/stjerne til {4,}:
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})(?:[,.; :?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})){2,10}/er
Hvis du ville have et eller flere ord pr. linje (mellem linje 1 og linje 5), kan du ændre indholdet inden for de sidste krøllede parenteser til 0,4 (bemærk, at du bruger 0, fordi du allerede matcher den første linje).
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?! & \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^, .;:?!& \n\r]+)*)){0,4}/is
Ordantal
Det følgende begrænser antallet af tilladte ord til et minimum på 1 og et maksimum på 200:
/^[-\w]+(?:\W+[-\w]+){0,199}\W*$/
For at øge minimumet skal du ændre nuldelen af {0.199}.
For at øge eller mindske det maksimale skal du ændre "199"-delen af {0,199}.
Tidsvalidering
Der er en række måder at skrive tidsformater på. Nogle af de mulige muligheder er 12 timer eller 24 timer, med sekunder eller uden. Selvom det er en mulighed at bruge dato spørgsmålstype (det kan også fange tid), kan du bruge kort fritekstspørgsmålstype med en af nedenstående regulære valideringsudtryk.
Følgende tre valideringsstrenge tester i 24 timers tid (i rækkefølge efter optrædener) uden sekunder, med valgfri sekunder til sidst med sekunder påkrævet:
/^(?:[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 ovenfor med sekunder, valgfri sekunder og med sekunder påkrævet:
/^(?">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 ovenfor med sekunder, valgfri sekunder og med sekunder påkrævet:
/^(?:(?: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])$/
USA stater
For at validere for én stat skal du bruge følgende (eksempel er Texas):
- TX kun med store bogstaver:
/^(TX)$/
- tx kun små bogstaver:
/^(tx)$/
- TX store eller små bogstaver:
/^([T|t][X|x])$/
Brøveri Filter
Sådan filtrerer du bandeord fra et svar:
/^(?i)((?!\bENTERPROFANITYHERE\b).)*$(?-i)/
Erstat "ENTERPROFANITYHERE" med dit dårlige ord.
\b vil tillade videregivelse af ord som "mord" og "hej", hvis du indtaster "røv" eller "helvede" som dit bandeord. Dette virker også, hvis du forsøger at udelade andre ord, navne osv. fra svar.
Nyttige links
I begyndelsen af denne wiki-sektion anbefaler vi, at du bruger https://regex101.com/ til at teste/oprette regulære udtryk. Du kan også bruge https://www.regextester.com/ til at oprette udtryk, hvis du er utilfreds med den første mulighed. Du kan bruge https://extendsclass.com/regex-tester.html til at visualisere regulære udtryk.