Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
Qui n'a jamais buté en essayant de remplir un formulaire. Il faut en effet que les données saisies respectent des formats;
certains champs doivent obligatoirement être renseignés, il doit y avoir des cohérences entre différents champs, etc.
Les formats de saisie à respecter sont définis à partir d'expressions régulières.
Les expressions régulières (ou plus simplement regExp) sont donc utilisées par HTML et JS pour le contrôle de saisie "côté client".
Je rappelle à cette occasion qu'un contrôle de saisie "côté client ou côté navigateur" ne dispense pas d'un contrôle
de saisie "côté serveur" (donc le plus souvent en PHP).
En effet un visiteur expérimenté peut neutraliser les contrôles de saisie via HTML et JS, en accédant aux outils de développement
du navigateur.
Dans ce chapitre je n'évoque que le contrôle de saisie 'côté client'. Pour le contrôle de saisie "côté serveur" je vous renvoie au chapitre : contrôle par PHP des données soumissionnées
Pour créer une regExp en JavaScript il faut utiliser le constructeur RegExp ou la créer de façon littérale.
On compare à chaque fois une regExp à une chaine via la méthode test().
Pour la regExp "exp7" notez les symboles ^ et $ qui délimitent le motif ; donc la chaine qui est lui est comparée doit coïncider strictemement à ce format ni plus ni moins ; rien devant et rien derrière 'bonjour' ; par contre la comparaison est insensible à la casse grâce à l'option "i".
La dernière regExp (exp8) est créée de façon littérale ; le motif doit être entre deux / et suivi des éventuelles options.
Examinons les différents tests.
Tous les tests retournent true si concordance entre la regExp et la chaine sauf l'avant dernier (emploi de l'opérateur !)
qui retourne true si divergence entre motif et chaine.
Vous verrez dans la troisième partie de ce chapitre qu'il existe d'autres méthodes applicables à une regExp ...
Les expressions régulières complexes sont une séquence de paires "classe-quantificateur".
Une classe indique le ou les caractères autorisés à la saisie. On reconnait une classe car elle est délimitée par des crochets.
Une classe peut être un énumération de caractères autorisés ou un intervalle ou un mélange des deux.
le ^ en début de classe juste après le crochet signifie "tout sauf ..."
Ne pas confondre avec le ^ en début de regExp qui signifie "début de chaine".
Onb peut utiliser certains raccourcis pour exprimer les classes.
Un quantificateur suit obligatoirement une classe et indique le nombre de caractères autorisés.
Un quantificateur est délimité par des accolades.
Les attributs pattern des champs de saisie ont pour valeur une regExp avec la même syntaxe que pour une regExp définie dans le cadre d'un script.
Emploi des pseudo-classes :invalid et :valid sur les balises input.
Donc tant que la saisie dans un champ ne correspond ni au type de champ ni au pattern la saisie est en rouge mais passe
au vert dès qu'elle correspond au pattern.
Envoi des donnés dans la même page avec la méthode POST.
Un script PHP basique dont le code :
echo "<h4>Vous êtes bien connecté</h4>";
La regExp est :^\w{1,}@\w{2,}\.[A-z]{2,4}$
Une adresse e-mail est un identifiant unique permettant d'envoyer et de recevoir des messages électroniques.
Le domaine contient obligatoirement un point encadré par les lettres maj. et min.
les saisies restent alors en rouge et la soumission est bloquée.
Puis faites des saisies en respectant les consignes : les saisies passent au vert et la soumission est effective.
Dans certains cas le contrôle de saisie "côté client" ne peut se limiter à du HTML (comme dans l'exemple précédent) ; il faut complèter avec un script JS qui éventuellement interdit la soumission même si tous les champs de saisie sont passés au vert ...
Pour vous inscrire sur un site de rencontres vous devez saisir en guise d'identifiant votre adresse mail
et la confirmer puis choisir un mot de passe et le confirmer.
Le mot de passe doit contenir entre 6 et 8 caractères alphanumériques c'est à dire des lettres non accentuées et des chiffres.
Les autres caractères sont bannis.
Avec HTML il est impossible de comparer les "values" de deux champs de saisie.
Il faut donc complèter le contrôle de saisie en HTML par un script qui va effectuer des comparaisons deux par deux.
J'ai donné un nom et un Id au formulaire.
Chaque champ de saisie a un nom : mail1, mail2, passe1 & passe2.
Chaque champ de saisie a l'attribut pattern
Le script est rédigé en JS moderne : utilisation de la méthode preventDefault() appliquée à l'objet de type event. Cette méthode annule le comportement par défaut du navigateur.
document.getElementById('form').onsubmit = function(event)
{
if (form.mail1.value == form.mail2.value
&& form.passe1.value == form.passe2.value) alert('soumission effectuée');
else {event.preventDefault(); alert("Erreurs de saisie !" ); }
} // fin fonction anonyme
Le script est exécuté lors de la tentative de soumission (clic sur le bouton "submit").
Dans le script JS on vérifie si on a bien saisi deux fois la même adresse mail et si on
a bien saisi deux fois le même mot de passe.
Si le test retourne true : alors comportement par défaut du navigateur c'est à dire soumission.
Par contre si le test retourne false la soumission est annulée.
Il est inutile dans le script de comparer chaque "value" par rapport à une regExp puisque ce contrôle est déjà effectué
via le code HTML.
Saisir : toto@free.fr - tata@free.fr - abcedef - bcdefg
Les adresses mail et les mots de passe sont valides ; tout est au vert mais la soumission échoue ...
pourquoi ?
Saisir : toto@free.fr - toto@free.fr - sesame - sesame
Les adresses mail et les mots de passe sont valides ; tout est au vert ; la soumission réussit ... pourquoi ?
Dans le cadre du premier script JS nous avions manipuler des regExp avec la méthode test().
Mais il existe d'autres méthodes applicables à une regExp ...