Une autre écriture, plus concise, peut utiliser les expressions régulières (regex pour regular expression).
If( n IsMatch(n Upper(TextInputSaisie.Text); n "[A-Z]{2}[ -]?[0-9]{3}[ -]?[A-Z]{2}"n );n "Format ok";n "Merci de respecter le format"n)
Cette version permet à l’utilisateur de saisir “AB-123-CD”, mais aussi “AB 123 CD” ou “AB123CD”.
Elle se lit de la manière suivante : un groupe de deux lettres, éventuellement un espace ou un tiret, un groupe de trois chiffres, éventuellement un espace ou un tiret, un groupe de deux lettres.
Il existe d’autres écritures pour décrire la regex, mais celle-ci a l’avantage d’être relativement concise tout en étant assez compréhensible.
Après se pose le problème de la sauvegarde au bon format (avec les tirets).
On peut imaginer dans le bouton Submit du formulaire la formule suivante :
UpdateContext({n locImmat: n MatchAll(n Upper(TextInputSaisie.Text);n "(?<debut>[A-Z]{2})[ -]?(?<milieu>[0-9]{3})[ -]?(?<fin>[A-Z]{2})"n )n})
Ici, on utilise un motif identique au précédent, dans lequel on a rajouté les sous-correspondances nommées (parfois appelées “groupes de capture nommés” car elle permettent de capturer un bout du motif), définies par les parenthèses et leur nom entre chevrons. Ces sous correspondances vont être réutilisées dans la propriété Default du contrôle-qui-va-bien (cela peut être TextInputSaisie) :