Actions

Utilisation des expressions régulières

From LimeSurvey Manual

Revision as of 07:33, 4 October 2023 by Maren.fritz (talk | contribs) (Created page with "==Prix suisse==")

Les expressions régulières doivent commencer et se terminer par une barre oblique ("/"). Vous pouvez trouver une bonne bibliothèque d'expressions régulières sur http://www.regexlib.net/. Ces modèles fonctionneront presque toujours s’ils sont entourés de barres obliques.

Pour tester vos expressions régulières vous pouvez utiliser ces testeurs d'expressions régulières: regex101 regex tester

Template:Remarque

  Attention : Veuillez noter que tous les exemples ci-dessous sont écrits sur une seule ligne !



Important : expressions régulières dans les conditions

Notez que lorsque vous utilisez des expressions régulières dans l'éditeur de conditions, n'incluez PAS la barre oblique de début et de fin.


Validation par email

Mise à jour (12/2018) : Étant donné que de nos jours, les noms de domaine ne peuvent pas seulement contenir des caractères spéciaux comme « ü », mais également utiliser plus de 3 caractères comme nom de domaine comme .tech ou .company, l'expression régulière d'e-mail ci-dessous vérifie uniquement si « @ » et « ». existe dans l’adresse e-mail saisie.

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

Si vous souhaitez valider une adresse par ligne, dans un champ texte long multiligne :

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

Dans cette expression régulière obsolète, le nom de domaine est limité à 3 caractères, ce qui ne couvre pas tous les domaines disponibles :

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

Codes postaux

Codes postaux australiens:

/^[0-9]{4}/

Codes postaux brésiliens

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

Codes postaux canadiens

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

Codes postaux américains

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

Pour que le code postal commence par zéro, utilisez :

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

Codes postaux britanniques

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

Notez que ceci n'est pas très exact et qu'une validation précise est beaucoup plus complexe. Par exemple, voir StackOverflow answer et Wikipedia pour plus informations.

Codes postaux français

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

L'expression ci-dessus est très précise et permettra de vérifier l'existence ou non du département français (deux premiers chiffres), y compris les départements et territoires d'outre-mer (DOM-TOM).


Numéros de téléphone

Numéros de téléphone aux États-Unis

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

ou

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

Cette deuxième option correspondra à tous les numéros de téléphone canadiens et américains qui incluent des symboles autres que des chiffres, notamment :

. ( ) - (espace)

Cela vous permettra de faire correspondre les numéros de téléphone qui ressemblent à ci-dessous :

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

Numéros de téléphone australiens

Les modèles suivants correspondent à tous les différents numéros de téléphone mobile et fixe australiens, y compris avec le préfixe de pays « +61 » :

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

Mais pas :

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

Les crochets, les espaces blancs et les tirets sont ignorés.

Les versions « Très précises : » répertoriées ici correspondent aux quatre ou cinq premiers chiffres d'un numéro pour garantir qu'il s'agit de numéros australiens valides.

Le « Pas très précis : » ne correspond qu'au premier et au deuxième chiffres et peut donc autoriser des nombres incorrects.

Tous les numéros de téléphone australiens (mobile et fixe - indicatif régional requis)

Tres 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})$/

Pas très précis :

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

Tous les numéros de téléphone australiens (lignes fixes uniquement - indicatif régional requis)

Tres 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}$/

Pas très précis :

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

Numéros de téléphone fixes de la Nouvelle-Galles du Sud (indicatif régional facultatif)

Tres précis:

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

Pas très précis :

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

Numéros de téléphone fixes victoriens et tasmaniens (indicatif régional facultatif)

Tres précis:

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

Pas très précis :

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

Numéros de téléphone fixes du Queensland (indicatif régional facultatif)

Tres précis:

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

Pas très précis :

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

Numéros de téléphone fixes d'Australie du Sud, du Territoire du Nord et d'Australie occidentale (indicatif régional facultatif)

Tres précis:

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

Pas très précis :

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

Numéros de téléphone mobile australiens uniquement

Tres 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}$/

Pas très précis :

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

Numéro de téléphone belge

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

Numéro de téléphone portable belge

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

Numéro de téléphone français

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

Numéro de téléphone portable français

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

Numéro de téléphone luxembourgeois

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

Numéro de téléphone mobile luxembourgeois

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

Marques allemandes (avec plus ou moins en option)

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


Validation de l'âge

Exemple : 20 à 99 ans

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

Exemple : 18-35 ans

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

Exemple : 19-65 ans

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


Validation du numéro

Nombres de 1 à 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}$/ fait la même chose que ci-dessus mais devrait s'exécuter un peu plus vite

Nombres de 1 à 999, 1.000 à 999.999 à 999.999.999

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

Accepte les nombres de 1 à 999, 1.000 à 999.999 à 999.999.999 mais rejette les nombres comme 999.1.1 , 94.22.22, 999.1.22, 999.11.1, 999.1.333

Validation des nombres avec décimale en option (pour le prix)

Accepte les nombres de 0 à 199, avec 2 décimales en option :

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

Validation des nombres avec séparateur de milliers

Espace comme séparateur, pas de moins

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

Point comme séparateur, moins autorisé

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

Il force deux points décimaux et accepte les nombres de 1,00 à 999 999 999,00 avec une virgule facultative délimitant les milliers/millions  y compris tous les éléments suivants : 1,00, 1 000,00, 12 345,67, 12345,02, 123 456 468,00, 1234566,00, 12. 3456789.00 mais pas 1 ,23h00, 12,3.4 ou 1234,43.04

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

Similaire à ce qui précède : force deux points décimaux mais accepte un "0" avant le séparateur décimal ",".

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

Comme ci-dessus, mais les deux points décimaux sont facultatifs :

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

Mois (1-12)

Si vous souhaitez demander le mois de naissance d'une personne, vous pouvez valider la saisie comme suit :

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

Largeur minimale (fixée à 3 dans cet exemple)

/^.{3,}$/


Devise

Monnaie américaine (signe dollar et cents en option)

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

Vérifiez l'utilisation des virgules :

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

Prix suisse

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.