5.6.4 Critères de validation


TABLE DES MATIÈRES
- Générateur de formulaire en ligne KoBoToolbox
- XLSForm
- Utilisation des regex : Quand, comment et exemples dans le domaine de l’humanitaire et du développement
Dans la conception de formulaires, les termes critères de validation et contrainte font référence à la même fonction, dont le but est de contraindre l’entrée des réponses à un certain format afin d’améliorer la qualité des données en les rendant uniformes.
Générateur de formulaire en ligne KoBoToolbox
Le troisième menu donne la possibilité d’ajouter des critères de validation. Cette fonction vous permet de limiter la plage de réponse et d’éviter l’enregistrement de réponses invalides. Par exemple, vous pouvez limiter la plage de réponse en fonction de l’âge d’une personne :
En cliquant sur “+ Ajouter une autre condition” vous pouvez ajouter une ou plusieurs contraintes. Un message d’erreur peut également être inclus pour informer l’enquêteur que les données saisies ne sont pas valides.
Vous trouverez ici des exemples en anglais de contraintes paramétrées dans le générateur de formulaire en ligne KoBoToolbox.
XLSForm
Cette page explique en anglais comment mettre en place un critère de validation pour une réponse afin de garantir la qualité des données. Cette page fournit quelques exemples tout comme l’aide-mémoire XLSForm qui donne de nombreux exemples de contraintes.
Vous pouvez également voir la playlist Kobotoolbox Validation de la chaine youtube Humanitarian Data Solution qui propose quelques tutoriels sur la façon de configurer les contraintes dans XLSForm.
Utilisation des regex : Quand, comment et exemples dans le domaine de l’humanitaire et du développement
Le codage dans XLSForm est de plus en plus documenté et développé sur le web. En suivant quelques tutoriels, vous pouvez commencer votre XLSForm à partir de rien et le construire. Cependant, certains aspects du codage restent encore dans l’ombre et donc très flous dans nos esprits.
Regex (ou regular expression pour “expression régulière”) fait référence à la syntaxe textuelle spécifique et standard pour représenter les formules ou motifs (en anglais “patterns”) auxquels le texte ou les entiers correspondants doivent se conformer (source: Wikipedia). C’est un type de contrainte souvent utilisé pour la saisie de numéros de téléphone, d’identifiants ou d’emails. Vous pouvez voir quelques exemples dans la feuille “constraint” de l’Aide-mémoire XLSForm. Comme ce site web dédié montre parfaitement que les regex() sont riches en termes de possibilités. Cependant, seules certaines parties spécifiques sont utiles dans les domaines de l’humanitaire et du développement. Dans cette ressource, nous verrons d’abord brièvement quand et comment utiliser regex() dans XLSForm. Nous nous pencherons ensuite sur des exemples plus concrets d’utilisation de regex() dans nos domaines de travail respectifs.
Liens intéressants à consulter (en anglais):
Quand utiliser regex()
Lorsque vous êtes familier avec la structure regex(), vous pouvez être tenté de l’utiliser dès que vous le pouvez. Cependant, regex() peut devenir très compliqué et parfois cela n’en vaut pas la peine. Voyons dans quels cas regex() est le plus nécessaire et le plus utile.
L’utilisation la plus courante et la plus utile de regex() est lorsque vous souhaitez que la réponse à vos questions de type “texte” ou “entier” ait un format spécifique : vous pouvez le faire en saisissant une regex() dans la colonne “contrainte” de votre question. La formule regex() fera alors en sorte que votre réponse soit, par exemple, un nombre à 5 chiffres ou un mot écrit en majuscules, etc.
Voici un exemple de ce à quoi peut ressembler une formule regex dans un XLSForm :
Et son résultat dans votre application de collecte de données (ODK Collect ici):
Comment utiliser regex()
La formule de contrainte regex() est exprimée dans la colonne des contraintes de la manière suivante :
regex(${value_to_apply_regex},[regular expression])
- ${value_to_apply_regex} peut également être exprimée par “.” dans la colonne des contraintes de cette même variable.
- Quant à regular expression [regular expression] : les regex() doivent être exprimés entre apostrophes (‘…’) pour toutes questions de type “text” et entre ‘^…$’ pour toutes questions de type “integer” ou les questions “text” qui ont été transformées en integer en ajoutant “numbers” dans la colonne“appearance”.
À l’intérieur de l’expression regex, vous pouvez utiliser […] pour exprimer tous les caractères que vous autorisez dans cette partie de la réponse et {…} pour exprimer le nombre de caractères que le recenseur peut saisir parmi la gamme de caractères que vous avez autorisé à utiliser. Vous pouvez également utiliser ”+” afin d’exprimer le fait que la réponse contiendra plusieurs parties différentes. Pour les lettres majuscules/minuscules ou les chiffres, il n’est pas nécessaire de les énumérer. Vous pouvez simplement déterminer les plages qui peuvent être utilisées, par exemple :
- A-Z: toutes les lettres majuscules peuvent être utilisées
- a-z: toutes les lettres minucules peuvent être utilisées
- 0-9: tous les chiffres peuvent être utilisés
De plus, comme vous limitez le format de la réponse en utilisant regex(), il est logique de rendre la question obligatoire afin que le recenseur ne puisse pas la sauter. Pour ce faire, saisissez un “oui “ dans la colonne “obligatoire “.
Pour plus d’informations sur la façon de coder une regex(), vous pouvez consulter ces sites web très utiles (en anglais) :
Toutefois, soyez prudent car la plupart des informations regex() disponibles sur le web sont exprimées en XML, qui est une codification plus complexe.
Exemples de regex() dans les formulaires
Exemple simple
Commençons par un exemple simple de regex() afin de mieux comprendre comment cela se construit. Supposons que vous créez une question “texte” demandant d’entrer le code du pays où se déroule l’enquête. La regex() sera exprimée comme suit :
regex(.,’[A-Z]{2}’)
Cela implique que seules les lettres majuscules peuvent être utilisées [A-Z] et que seules 2 d’entre elles peuvent être saisies {2} pour que le code pays soit validé comme réponse.
Adresse e-mail
Source: regular-expressions.info
Supposons que vous souhaitiez demander l’adresse électronique de la personne interrogée et que vous vouliez éviter toute erreur de frappe dans la réponse et vous assurer qu’elle a un format –@–.-. Vous devrez créer une question de type “texte” et utiliser le regex() suivant dans la colonne de contrainte de votre question :
regex(., ‘[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+[.][A-Za-z]{2,4}’)
Voyons maintenant comment cette formule est élaborée :
- ., : fait référence à la variable/question à contraindre ; ici, il s’agit de la question demandant l’adresse électronique de la personne interrogée.
- [A-Za-z0-9._%+-] : il s’agit de tous les caractères que vous pouvez saisir avant le “ @ “ de votre adresse électronique. Ici, les lettres majuscules/minuscules, les chiffres et plusieurs symboles spécifiques (. _ % + -) sont autorisés. Le nombre de caractères que vous pouvez saisir est ici illimité.
- +@[A-Za-z0-9-] : il s’agit de tous les caractères que vous pouvez saisir après le symbole “ @ “ dans l’adresse électronique. Ici, les majuscules, les lettres normales, les chiffres et les symboles sont autorisés. Le nombre de caractères que vous pouvez saisir est illimité.
- +[.][A-Za-z]{2,4} : il s’agit de la fin de votre adresse électronique. Il faut d’abord un point (.). Ensuite, 2 à 4 caractères en majuscules ou en lettres normales sont nécessaires (par exemple, .com, .int, etc.).
- ‘…’ : comme il s’agit d’une question textuelle, vous pouvez placer l’expression régulière entre les apostrophes.
Nom et prénom
Source: forum.opendatakit.org
Voici un autre exemple de question de type “text” dont vous souhaitez limiter le format. Ici, vous demandez le nom et le prénom de la personne interrogée et vous voulez vous assurer que les deux commencent par une majuscule et qu’il y a un espace entre les deux :
regex(.,’[A-Z]{1}[a-z]{1,50}[ ]{1}[A-Z]{1}[a-z]{1,50}’)
La formule est composée des éléments suivants :
- ”.,”: fait référence à la variable/question à contraindre ; ici, il s’agit de la question demandant le nom et le prénom de la personne interrogée.
- “[A-Z]{1}[a-z]{1,50}”: cela implique que la première lettre du nom doit être une majuscule et que le reste du nom est écrit en minuscules (jusqu’à un maximum de 50 lettres). 50 est une valeur sûre, car les noms sont généralement beaucoup plus courts que cela.
- ”[ ]{1}”: ici, vous avez besoin d’un espace obligatoire (et unique) après le nom.
- “[A-Z]{1}[a-z]{1,50}”: cela implique exactement la même structure que pour le nom, mais cette fois pour le nom de famille.
- “‘…’”: comme il s’agit d’une question textuelle, vous pouvez mettre toutes les expressions régulières entre apostrophes.
Numéro de ménage/numéro de série (contenant uniquement des numéros)
Source : forum.opendatakit.org
Pour chaque type de question “entière”, ODK vous permet de saisir des entiers jusqu’à 9 chiffres. Si vous souhaitez limiter ces nombres entiers à un nombre contenant moins de 9 chiffres ou faire en sorte que le nombre contienne plus de 9 chiffres, vous pouvez utiliser regex() dans la contrainte afin de le faire. Les exemples typiques de ce type de questions “entières” dans les domaines de l’humanitaire et du développement sont les numéros de ménage/série/enregistrement ou les P-codes.
Il existe deux façons différentes de procéder, comme l’exprime ce tableau :
Type de regex à utiliser | Quand ? | Comment ? |
---|---|---|
Une question de type “nombre entier “ (integer) | -Pour les nombres ayant un maximum de 9 chiffres. La raison à cela est que toutes les questions “entières” sont limitées à un maximum de 9 chiffres dans les XLSForm. -Pour les nombres qui ne commencent pas par un “0”. |
-Type de question : “nombre entier” (integer) -formule regex dans la colonne de contrainte avec l’expression régulière exprimée entre ‘^–$’. -“oui” dans la colonne “required” |
Une question de type “texte” | -Pour les nombres potentiellement avec plus de 9 chiffres. -Pour les nombres qui potentiellement commencent par un “0”. |
-question de type “texte” -formule regex dans la colonne des contraintes avec une expression régulière exprimée entre ‘^–$’. -“chiffres “ dans la colonne “appearence” -“oui “ dans la colonne “required” |
Une formule regex() pour une question de type “entier” (integer) - Exemple :
regex(., ‘^[0-9]{8}$’)
Cette formule exige que votre numéro ait exactement 8 chiffres, en commençant par un chiffre de 1 à 9 et suivi de chiffres entre 0 et 9.
Comme c’est une question de type “ entier “, l’expression régulière est à mettre entre ’^-$’, où “ ^ “ indique où le nombre doit commencer et “ $ “ où il doit finir.
Une formule regex() pour une question de type “texte” - Exemples :
regex(., ‘^[0-9]{10}$’) + “chiffres” dans la colonne “apparence
Cette formule exige que votre numéro ait exactement 10 chiffres et qu’il puisse commencer par n’importe quel chiffre, “0” compris.
Même s’il s’agit d’une question de type “texte”, en spécifiant des “chiffres” en apparence, vous la transformez en question de type “entier”. Ainsi, les mêmes règles que pour les questions de type “entier” s’appliquent, ce qui signifie que votre expression régulière doit être placée entre ‘^…$’.
regex(., ‘^[0-9]{5,}$’) + “numbers” in the “appearance” column
Cette formule exige que votre numéro ait 5 chiffres ou plus ({5,}) et qu’il puisse commencer par n’importe quel chiffre, “0” inclus. Il faut également mettre l’expression régulière entre ‘^…$’.
Codes contenant des chiffres et des lettres
Un dernier exemple de contrainte regex() que vous pourriez avoir besoin de coder dans votre enquête est un code contenant à la fois des chiffres et des lettres. Les codes de projet et les numéros d’enregistrement sont quelques exemples de ces codes. Comme les codes contiennent à la fois des chiffres et des lettres, vous devrez créer une question de type “texte”. De même, il n’est pas nécessaire de mentionner les “chiffres” en apparence. Exemple - Question de type “texte” demandant le code du projet :
regex(.,’[M][O][B][0-9]{2}’)
Ce code doit commencer par MOB et être suivi de deux chiffres de 0 à 9 (c’est-à-dire MOB21, MOB76). Cette regex() est composée des éléments suivants :
- ”.,” : fait référence à la variable/question à contraindre ; ici c’est la question demandant le code du projet.
- “[M][O][B]” : vous devez nécessairement commencer votre code par MOB (en majuscules).
- “[0-9]{2}” : votre code doit ensuite contenir deux chiffres de 0 à 9.
- “‘…’” : comme il s’agit d’une question textuelle, vous pouvez mettre toutes les expressions régulières entre apostrophes.
Vous trouverez tous les exemples de cette ressource dans le XLSForm ci-joint. Et n’oubliez pas que les tests sont la clé du succès de la collecte des données sur mobile, alors testez, testez, testez !