Actions

Utilisation des expressions régulières: Difference between revisions

From LimeSurvey Manual

No edit summary
No edit summary
Line 4: Line 4:
__TOC__
__TOC__


=#Avertissements=
=#Validation dans LimeSurvey=


L'objet de cette section n'est pas d'expliquer comment constituer des expressions régulières ou bien
Lorsque vous définissez les attributs d'une question, vous devez indiquer son code, le texte de la question, le type de question,


d'expliquer leurs fonctionnements.
le nombre minimum et/ou maximum de caractères, etc.


De très bons livres le font comme Maîtrise des expressions régulières de Jeffrey E. F. Friedl.
Cependant, il n'est pas possible définir tous les attributs de contrôle pouvant satisfaire les besoins des utilisateurs de LimeSurvey.
 
La zone de saisie ''Validation'' de l'écran d'édition d'une question joue ce rôle et permet d'ajouter des contrôles supplémentaires sur la réponse.
 
Ces contrôles se sont grâce à des expressions régulières que l'on place dans la zone de saisie ''Validation''.


Il y a également des sites traitent de ce sujet comme  http://www.regxlib.net/(en anglais)
<center>[[File:LimeSurvey-2011-06-01-19-18.png]]


ou bien http://perl.enstimac.fr/DocFr/perlrequick.html(en fran&ccedil;ais).
''<u>Fig.1 : Extrait de l'&eacute;cran d'&eacute;dition d'une question</u>''</center>


=#Les expressions r&eacute;guli&egrave;res dans LimeSurvey=
=#Bref rappel=


lorsque vous d&eacute;finissez les attributs d'une question, vous devez indiquer son code, la question, le type de question,
<div class="simplebox"><u>Avertissements</u>


le nombre minimum et/ou maximum de caract&egrave;res, etc.Cependant, il n'est pas possible d&eacute;finir
L'objet de cette section n'est pas d'expliquer comment constituer des expressions r&eacute;guli&egrave;res


des attributs pour tous les besoins des utilisateurs de LimeSurvey.
ou bien d'expliquer leurs fonctionnements.


La zone de saisie Validation joue ce r&ocirc;le. Dans cette zone, vous pouvez vous pouvez Les expression r&eacute;guli&egrave;res peuvent r&eacute;pondre.
De tr&egrave;s bons livres le font comme Ma&icirc;trise des expressions r&eacute;guli&egrave;res de Jeffrey E. F. Friedl.


[[File:LimeSurvey-2011-06-01-19-18.png]]
Il y a &eacute;galement des sites traitent de ce sujet comme  http://www.regxlib.net/(en anglais)


=#Bref rappel=
ou bien http://perl.enstimac.fr/DocFr/perlrequick.html(en fran&ccedil;ais).</div>


Les expressions r&eacute;guli&egrave;res dans LimeSurvey sont du type PERL et doivent commencer et se terminer par le caract&egrave;re slash ("/").
Les expressions r&eacute;guli&egrave;res dans LimeSurvey sont du type PERL et doivent commencer et se terminer par le caract&egrave;re slash ("/").

Revision as of 20:55, 1 June 2011

La traduction de cette page n'est pas terminée.

#Validation dans LimeSurvey

Lorsque vous définissez les attributs d'une question, vous devez indiquer son code, le texte de la question, le type de question,

le nombre minimum et/ou maximum de caractères, etc.

Cependant, il n'est pas possible définir tous les attributs de contrôle pouvant satisfaire les besoins des utilisateurs de LimeSurvey.

La zone de saisie Validation de l'écran d'édition d'une question joue ce rôle et permet d'ajouter des contrôles supplémentaires sur la réponse.

Ces contrôles se sont grâce à des expressions régulières que l'on place dans la zone de saisie Validation.

Fig.1 : Extrait de l'écran d'édition d'une question

#Bref rappel

Avertissements

L'objet de cette section n'est pas d'expliquer comment constituer des expressions régulières

ou bien d'expliquer leurs fonctionnements.

De très bons livres le font comme Maîtrise des expressions régulières de Jeffrey E. F. Friedl.

Il y a également des sites traitent de ce sujet comme  http://www.regxlib.net/(en anglais)

ou bien http://perl.enstimac.fr/DocFr/perlrequick.html(en français).

Les expressions régulières dans LimeSurvey sont du type PERL et doivent commencer et se terminer par le caractère slash ("/").

  Métacaractère   Signification
  .   n'importe quel caractère
[ ] tous caractères énumérés     [abc]
  Quantifieur   Signification
  *   zéro ou plus
  1 1 ou plus
  ? 0 ou 1
{4} 4 fois exactement
{4,} 4 fois et plus
{4,6} 4,5 ou 6 fois
  Caractères   Signification
  \s   espace, tabulation
  \S 1 ou plus
  \d 0 ou 1
\D 4 fois exactement
\w 4 fois et plus
\W 4,5 ou 6 fois
\n à la ligne
\r retour à la ligne
\t tabulation
\xhh caractère en hexadécimal (hh)

Vous pouvez tester vos expressions régulières sur http://www.spaweditor.com/scripts/regex/index.php

#Quelques exemples

Vous pouvez ajouter des expressions régulières mais testées auparavant!

Exemples (notez qu'elles sont toutes sur une seule ligne):

Validation d'un code postal français

/^0[1-9]|[1-8][0-9]|9[0-8]|2A|2B[0-9]{3}$/

Cette expression teste seulement de le format du code postal mais pas de sa validité.

Validation du numéro de département français

/^0[1-9]|[1-8][0-9]|9[0-8]|2A|2B$/

Cette expression teste seulement de le format du numéro du département mais pas de sa validité.

Validation d'un nombre

Validation d'un nombre entier

nombre entier compris dans un intervalle défini (age, etc.) de 20 à 99

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

nombre entier compris dans un intervalle défini (age, etc.) de 18 à 35

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

nombre entier compris dans un intervalle défini (age, etc.) de 19 à 65

<div class="simplebox">(1[8-9]|[2-5][0-9]|6[0-5])$

nombre entier compris dans un intervalle 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}$/

C'est deux expressions produisent le même résultat.

nombre entier compris dans plusieurs intervalles de 1 à 999, de 1.000 à 999.999

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

validation d'un score compris entre 1 et 10

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

validation d'un score compris entre 1 et 100

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

Validation d'un nombre décimal

Ce type de validation peut être utilisé dans le cas de prix, mesure

Validation d'un nombre décimal

/^([1][0-9][0-9]|[1-9][0-9]|[0-9])[[\.)[0-9][0-9])?$/
les nombres entre ayant une partie décimale optionnelle à deux chiffres accepts numbers from 0 to 199, with 2 decimal 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
==Monnaie==
====Euro (le signe Euro et les centimes sont optionnels)====
 /^\d+(\.(\d{3}]]?€?$/

Dollar US

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

Le signe dollar en début de saisie et les cents sont optionnels.

Prix en Franc Suisse

C'est un nombre avec deux décimales  après la virgule dont le dernier chiffre est soit 5, soit 0.

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

Validation d'une date

Validation d'une date au format jj/mm/aaaa

/^\d{1,2}\/\d{1,2}\/\d{4}$/ a tester

Validation d'une date au format jj/mm/aaaa du 20 ou 21éme siècle

/^\d{1,2}\/\d{1,2}\/(19|20)\d{2}$/ a tester

Validation d'un mois (1-12)

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

Cette expression permet de saisir le mois de janvier soit 1, soit 01.

Validation d'une longueur de saisie

Validation d'une longueur de saisie minimum

/^.{3,}$/

ici la longueur minimum est de 3 caractères quelconques

Validation d'une longueur de saisie maximum

/^.{3,}$/

ici la longueur maximum est de 3 caractères quelconques

Text validation

currently multiple short text doesn't support minimum or maximum answers. One way around this is to use a long free text type question with a regular expression.

The following test for at least one word per line for at least 3 lines and no more than 10 lines. /(?:[</div>,.;:?!& \n\r]+(?: [<div class="simplebox">,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[</div>,.;:?!& \n\r]+(?: [<div class="simplebox">,.;:?!& \n\r]+)*)){2,10}/isIf you wanted, say five words per line you could change the first and last star/asterisk to {4,} e.g. /(?:[</div>,.;:?!& \n\r]+(?: [<div class="simplebox">,.;:?!& \n\r]+){4,})(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[</div>,.;:?!& \n\r]+(?: [<div class="simplebox">,.;:?!& \n\r]+){4,})){2,10}/isIf you wanted one or more words per line on between 1 and 5 lines, you can change the content of the last curley braces to {0,4} (note you use 0 because you're already matching the first line. /(?:[</div>,.;:?!& \n\r]+(?: [<div class="simplebox">,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[</div>,.;:?!& \n\r]+(?: [<div class="simplebox">,.;:?!& \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 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~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))$/~/pp</span>pp~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](?<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])$/

Validation d'un mot

Validation du mot dans une liste

/^(arbre|feuille|fleur){1,1}$/

Le mot saisie doit correspondre exactement (minuscule) au mot dans la liste.

Validation du mot dans une liste

/^(arbre|feuille|fleur){1,1}$/i

Ici, on ne tient pas compte des minuscules et des majuscules : Les mots suivants Arbre,arbre, ARBRE, ArBrE, etc. sont tous valides.