1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
function Formulaire(formulaire)
// constructeur de la classe (en entrée : l'attribut "name" du formulaire à valider)
{
// variables membres
this.form=formulaire; // nom du formulaire
this.erreurs=new Array(); // tableau des champs contenant des erreurs de saisie
// tableaux des règles de validation appliquées aux champs
this.regles=new Array();
this.messages=new Array();
this.validations=new Array();
this.params=new Array();
// méthodes
this.regle=regleChamp;
this.nettoyer=nettoyerChaine;
this.valider=validerForm;
this.liste=listeErreurs;
}
function regleChamp(champ, type, message, param)
/* ajoute une règle de validation :
- "champ" est la valeur de l'attribut "name" du champ
- "type" est la règle de validation proprement dite
- "message" est le message d'erreur en cas de validation erronée
- "param" est un paramètre facultatif, utilisé par ceratines règles */
{
this.regles.push(champ);
this.validations.push(type);
this.messages.push(message);
this.params.push(param);
}
function listeErreurs()
// retourne la liste des erreurs
{
var x, liste="";
// construction de la chaîne
for(x=0; x<this.erreurs.length; x++) liste+="- "+this.erreurs[x]+"\n";
return liste;
}
function nettoyerChaine(chaine)
// supprime les espaces en début et fin de chaîne (équivalent à la fonction PHP "trim()")
{
regex=new RegExp("(^ +)|( +$)", "g");
chaine=chaine.replace(regex, "");
return chaine;
}
function validerForm()
// valide le formulaire : chaque champ doit vérifier les règles qui lui ont été définies
{
var x, regex, msg="";
eval("var formulaire=document."+this.form+";");
// si aucune règle n'a été définie, la validation est toujours vraie
if(!this.regles.length) return true;
// on examine chaque champ
for(x=0; x<this.regles.length; x++)
{
// on effectue au préalable un petit nettoyage sur le champ à valider
eval("formulaire."+this.regles[x]+".value=this.nettoyer(formulaire."+this.regles[x]+".value);");
switch(this.validations[x])
{
// le champ doit avoir le même contenu qu'un autre
case "comparaison":
eval("if(formulaire."+this.regles[x]+".value!='"+this.params[x]+"') this.erreurs.push(this.messages[x]);");
break;
/* le champ doit avoir une certaine longueur : c'est le dernier paramètre sous la forme "min,max"
(0 signifiant pas de minimum ou de maximum) */
case "longueur":
eval("var longueur=formulaire."+this.regles[x]+".value.length;");
if(longueur)
{
var temp=this.params[x].split(",( +)?");
mini=parseInt(temp[0]);
maxi=parseInt(temp[1]);
if((mini && longueur<mini) || (maxi && longueur>maxi)) this.erreurs.push(this.messages[x]);
}
break;
// le champ (uniquement s'il est rempli) doit vérifier une expression régulière
case "regex":
switch(this.params[x])
{
// quelques exemples...
case "mail":
regex=new RegExp("^[a-z0-9_]([.-]?[a-z0-9_]+)+@[a-z0-9_]([.-]?[a-z0-9_]+)+\.([a-z]{2,4}|[a-z]{6})$", "gi");
break;
// par défaut (non vide)
default:
regex=new RegExp("^.+$", "g");
}
eval('if(formulaire.'+this.regles[x]+'.value!="" && !regex.exec(formulaire.'+this.regles[x]+'.value)) this.erreurs.push(this.messages[x]);');
break;
case "requis":
default:
// le champ doit juste être rempli
eval('if(formulaire.'+this.regles[x]+'.value=="") this.erreurs.push(this.messages[x]);');
}
}
// en cas d'erreur, on affiche les différents messages
if(this.erreurs.length)
{
var msg="Le formulaire comporte des erreurs :\n\n"+this.liste()+"\nVeuillez remplir correctement les champs.";
alert(msg);
return false;
}
// en cas de succès, on envoie le formulaire
return true;
} |
Partager