Syntaxe pour vérifier qu'un champ contient au moins 2 lettres ET des chiffres  (Lu 319 fois) Partager ce sujet Imprimer

1 B


Logic  02 juillet 2020 : 16:47

Bonjour,
Grâce au forum et ses membres, j'ai réussi à faire un formulaire assez complet.
Malgré tous mes efforts pour border son remplissage, j'ai encore des utilisateurs qui arrivent à renseigner des erreurs :
Je chercher à vérifier un champ qui doit contenir au moins 2 lettres ET des chiffres ( Ex : x-99x9 ou x99x9 ou xx-999x9 ou xx999x9 )
A minima, alphanumérique si la demande ci dessus est trop complexe. J'ai trouvé un sujet sur le forum mais les fichiers joints ne sont plus dispo et le lien vers planetPDF est mort.
Merci de votre aide.

IP archivée


Merlin  02 juillet 2020 : 19:17

Bonjour et bienvenue

Son principal fondateur est mort (jeune, la quarantaine) l'année dernière et pendant le confinement (français) PlanetPDF a disparu dans un trou noir.   :Smiley11:
https://www.pdfa.org/in-memory-of-karl-de-abrew/

Le plus simple est d'utiliser un "masque arbitraire" : https://abracadabrapdf.net/forum/index.php/topic,1301.msg5905.html#msg5905
Le truc c'est qu'il faudra que tu choisisses une seule syntaxe parmi les 4 que tu proposes.
Si on veut que le champ accepte plusieurs syntaxes (avec et sans tirets, etc) il faudrait utiliser un script JavaScript.


IP archivée


Logic  02 juillet 2020 : 20:35

Ah...paix à son âme
Pour en revenir à ma question, c'est bien un bout de code que je recherche :
Sans aller trop loin, si déjà je pouvais vérifier qu'il y a des lettres ET des chiffres dans la valeur du champ. je serai déjà très content.


du genre : Si tous les caractères du champ sont des chiffres ou tous les caractères sont de lettres
app.alert

IP archivée


Merlin  03 juillet 2020 : 13:10

Essaye ça en script de validation dans le champ concerné.
Normalement cette regex devrait capter les 4 exemples que tu as donné (non testé).

strTXT = event.value;
if ((/[\l\u]-?\d\d\d?[\l\u]\d/.test(strTXT)) && (strTXT != "") && (strTXT != undefined)) {
   // script OK
}
else {
   // script KO
}

IP archivée


bebarth  03 juillet 2020 : 13:35

bonjour,
L'expression régulière permet effectivement de vérifier si le texte est conforme à l'une des 4 syntaxes.
Moi je te propose d'alerter en fin de frappe :// Script d'action champ désactivé
var modeleRegEx=/^\D{1,2}-?\d{2,3}\D\d$/;
if (!modeleRegEx.test(event.value)) app.alert("La syntaxe n'est pas correcte.",3);
ou de gérer la frappe :
// Script des touches personnalisé
if(!event.willCommit) {
    var aTester=event.value.split("");
    aTester.splice(event.selStart, event.selEnd-event.selStart, event.change);
    var testeChaine=aTester.join("");
    // Teste de validité de l'entrée
    var modeleRegEx=/^\D{0,2}-?(\d{0,3}(\D(\d)?)?)?$/;
    event.rc=modeleRegEx.test(testeChaine);
} else {
    var modeleRegEx=/^\D{1,2}-?\d{2,3}\D\d$/;
    event.rc=(event.value=="") || modeleRegEx.test(event.value);
}
@+
 :bonjour:

IP archivée


Logic  03 juillet 2020 : 15:21

Merci Bebarth et Merlin de vous pencher sur mon problème,
Quand je parlais de syntaxe  :oh: on est en plein dedans !
Je ne connais pas du tout modeleRegEx, j'ai encore beaucoup de choses à découvrir.
Bebarth, j'ai choisi la vérification quand on sort du champ : Impeccable  :extra:


Une autre petite question pour finaliser mon formulaire :


j'ai adapté un code de Bebarth pour empêcher les utilisateurs d'enregistrer et leur indiquer qu'il faut utiliser un bouton pour valider le formulaire.
Cependant que je réponde oui ou non le formulaire s'enregistre  :doute:

var cMsg = "AVERTISSEMENT:";
cMsg += "\n\n\Si vous enregistrez, les donn\u00E9es saisies dans ce formulaire ne seront pas conserv\u00E9es !";
cMsg += "\n\n\Utilisez le bouton IMPRIMER pour enregistrer le formulaire compl\u00E9t\u00E9 au format PDF.";
cMsg += "\n\n\Etes-vous sûr de vouloir enregistrer ?";


var nRtn = app.alert(cMsg,2,2);
if(nRtn == 4)
this.resetForm();
else if(nRtn == 3)
exit;
else
//Unknown Response
  console.println("The Response Was somthing other than Yes/No: " + nRtn);


Où est ce que je me suis trompé ?

IP archivée


Merlin  03 juillet 2020 : 20:09

Tu ne t'es pas trompé.

Citer
pour empêcher les utilisateurs d'enregistrer
:tutut:
Heureusement pour les utilisateurs il n'est pas possible de les empêcher d'enregistrer (il y a des cas de force majeure : coupure de courant dans 2 mn, etc.) ou d'imprimer un document via un JavaScript.
On peut placer des script en évènements "Document sera  imprimé" ou "Document sera enregistré", avec des alertes on non, mais ça n'empêche pas la suite des évènements de se produire (dialogue Enregistrer ou dialogue Imprimer).

Il est toujours beaucoup plus simple, plus productif et plus user-friendly, c'est de simplement alerter l'utilisateur en lui affichant : "Tous les champs obligatoires ne sont pas remplis blablabla, voulez-vous enregistrer/imprimer ce document quand-même ?".

- Parce-qu'il ne sait pas que s'il clique NON il aura quand même ce qu'il voulait.
- Parce-qu'une fois averti, c'est un grand-garçon/fille qui sait ce qu'il/elle fait. Et qui a le plus souvent de bonnes raisons de vouloir le faire.
 :Smiley15:

IP archivée


bebarth  03 juillet 2020 : 20:59

Bebarth, j'ai choisi la vérification quand on sort du champ : Impeccable  :extra:
Perso, j'aurais choisi l'autre méthode. Je trouve plus logique de contrôler la frappe instantanée plutôt que t'attendre la fin complète de la frappe et dire à l'utilisateur qu'il s'est trompé...
@+
 :bonjour:

IP archivée


Logic  03 juillet 2020 : 21:39

Merlin, je loue ta foi en les utilisateurs ce que je faisait aussi mais comme disait l'autre ça c'était avant.
Mon formulaire d'origine était très light,  pas de contrôle de champ, des cases cochées par défaut pour gagner du temps bref le truc simplissime.
Résultat dans 95% des cas, le formulaire est mal rempli. J'ai dû tout revoir et infantilisé mes utilisateurs en essayant de tout border pour avoir des informations correctes dans les champs.
Par exemple, j'ai fait ma demande initiale pour éviter que les utilisateurs renseignent un nombre au lieu d'un code alphanumérique...en ayant comme réponse : "Ah mince, j'ai pas vu...pourtant je me suis appliqué..." Bref, ils sont tous débordés et remplissent à la "one again". Au final, moi et mon équipe perdons beaucoup de temps par la suite à essayer d'avoir les bonnes informations.

Pour ce qui est d'enregistrer, le formulaire est dispo sur un réseau et doit rester propre. c'est la 1ère raison qui fait que je ne veux qu'il puisse enregistrer.
La deuxième, c'est que le document enregistré fait 2,5 Mo contre quelques centaines de ko en passant par imprimer mais surtout, en faisant enregistrer, les champs peuvent être modifié à posteriori ce qui n'est pas compatible avec l'utilisation prévue : une fois validé, personne ne doit pouvoir changer son contenu.


Si tu as des solutions plus adaptées je suis preneur.


Bon weekend à tous.

IP archivée


Merlin  03 juillet 2020 : 22:36

Citer
une fois validé, personne ne doit pouvoir changer son contenu.
Si tu as des solutions plus adaptées je suis preneur.
Tu devrais t'intéresser aux signatures numériques, a priori c'est ce que tu cherches : une fois signé un document n'est plus modifiable.
Et si on parvenait à le modifier quand même ça invaliderait la signature.

IP archivée