x

Hovedkapitler

  1. LimeSurvey Cloud vs LimeSurvey CE
  2. LimeSurvey Cloud - Hurtig startguide
  3. LimeSurvey CE - Installation
  4. Sådan designes en god undersøgelse (guide)
  5. Kom godt i gang
  6. LimeSurvey konfiguration
  7. Introduktion - Undersøgelser
  8. Se undersøgelsesindstillinger
  9. Se undersøgelsesmenuen
  10. Se undersøgelsens struktur
  11. Introduktion - Spørgsmål
  12. Introduktion - Spørgegrupper
  13. Introduktion - Undersøgelser - Ledelse
  14. Indstillinger for undersøgelsesværktøjslinje
  15. Flersproget undersøgelse
  16. Hurtig startguide - ExpressionScript
  17. Avancerede egenskaber
  18. Generelle FAQ
  19. Fejlfinding
  20. Løsninger
  21. Licens
  22. Versionsændringslog
  23. Plugins - Avanceret
 Actions

Brug af regulære udtryk

From LimeSurvey Manual

Revision as of 12:15, 2 January 2024 by Maren.fritz (talk | contribs) (Created page with "==Talvalidering med valgfri decimal (til pris)== Accepterer tal fra 0 til 199, med 2 decimaler valgfri: <source lang="html"> /^([1][0-9][0-9]|[1-9][0-9]|[0-9])((\.)[0-9][0-9])...")

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.

Template:Bemærk

  Attention : Bemærk venligst, at alle nedenstående eksempler er skrevet på én linje!



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]) ?$/

Number validation with thousand separator

Space as separator, no minus

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

Dot as separator, minus allowed

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

It forces two decimal points and 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}$/

Similar to the above: Forces two decimal points but accepts a "0" before decimal separator ",".

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

Same as above, but the two decimal points are optional:

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

Month (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 width (set to 3 in this example)

/^.{3,}$/


Currency

US currency (dollar sign and cents optional)

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

Check for comma usage:

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

Swiss price

A number with two decimal numbers after the decimal point of which the last one is either a 5 or a 0:

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


Validate score

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.