Subversion Repositories Sites.tela-botanica.org

Rev

Blame | Last modification | View Log | RSS feed

/* 
Origine du script : http://actuel.fr.selfhtml.org/articles/javascript/controle_formulaire/index.htm
Auteur : Dieter RABER <d.raber@gmx.net>
*/
function validate(sender, myarray, err_hd) {
        
        var message_erreur = !err_hd?new Array('Les erreurs suivantes sont survenues:\n'):new Array(err_hd+'\n');
        var error = false;

        if (!sender.name) {
                alert('Le formulaire doit comporter un attribut name');
                return false;
        }

        for (i = 0; i < myarray.length; i++) {
                field = document.forms[sender.name].elements[myarray[i][0]];
        
                /* Bloc 1 vérifie les champs qui doivent être renseignés */
                if (myarray[i][1].indexOf('e') > -1) {
                        if (!field.value) {
                                error = true;
                                message_erreur.push(myarray[i][2]);
                        }
                }
        
        /* Bloc 2 vérifie si l'adresse électronique est correcte dans la forme */
                else if (myarray[i][1].indexOf('m')>-1) {
                        if (field.value) {
                                var usr = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
                        var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
                                var regex = "^"+usr+"\@"+domain+"$";
                                var myrxp = new RegExp(regex);
                                var check = (myrxp.test(field.value));
                                        if (check!=true) {
                                                error = true;
                                                message_erreur.push(field.value+" "+myarray[i][2]);
                                        }
                                }
                        }
        
        /* Bloc 3 vérifie les champs dont la valeur doit être numérique */
                else if (myarray[i][1].indexOf('n')>-1) {
                        var num_error = false;
                        if(field.value) {
                                var myvalue = field.value;
                                var num = myvalue.match(/[^0-9,\.]/gi)
                                var dot = myvalue.match(/\./g);
                                var com = myvalue.match(/,/g);
                                if (num!=null) {
                                        num_error = true;
                                }
                                else if ((dot!=null)&&(dot.length>1)) {
                                        num_error = true;
                                }
                                else if ((com!=null)&&(com.length>1)) {
                                        num_error = true;
                                }
                                else if ((com!=null)&&(dot!=null)) {
                                        num_error = true;
                                }
                        }
                        if (num_error==true) {
                                        error = true;
                                        message_erreur.push(myvalue+" "+myarray[i][2]);
                        }
                }
        
        /* Bloc 4 vérifie la valeur à l'aide d'une expression régulière sur un modèle déterminé */
                else if (myarray[i][1].indexOf('r')>-1) {
                        var regexp = myarray[i][3];
                        if (field.value) {
                                if (!regexp.test(field.value)) {
                                        error = true;
                                        message_erreur.push(field.value+" "+myarray[i][2]);
                                }
                        }
                }
        
        /* Bloc 5 vérifie les champs qui doivent être formatés comme des prix et modifie éventuellement le formatage */
                else if (myarray[i][1].indexOf('p')>-1) {
                        var myvalue = field.value;
                        var reg = /,-{1,}|\.-{1,}/;
                        var nantest_value = myvalue.replace(reg,"");
                        var num = nantest_value.match(/[^0-9,\.]/gi)
                        sep = myarray[i][1].substr(1,1)?myarray[i][1].substr(1,1):',';
                        if (field.value) {
                                var myvalue = field.value.replace(/\./,',');
                                if (myvalue.indexOf(',')==-1) {
                                        field.value = myvalue+sep+'00';
                                }
                                else if (myvalue.indexOf(",--")>-1) {
                                        field.value = myvalue.replace(/,--/,sep+'00');
                                }
                                else if (myvalue.indexOf(",-")>-1) {
                                        field.value = myvalue.replace(/,-/,sep+'00');
                                }
                                else if (!myvalue.substring(myvalue.indexOf(',') + 2)) {
                                        error=true;
                                        message_erreur.push(field.value+" "+myarray[i][2]);
                                }
                                else if (myvalue.substring(myvalue.indexOf(',') + 3)!='') {
                                        error=true;
                                        message_erreur.push(field.value+" "+myarray[i][2]);
                                } else if (num!=null) {
                                        error = true;
                                        message_erreur.push(field.value+" "+myarray[i][2]);
                                }
                        }
                }
                
                /* Bloc 6 vérifie les champs de nom et rectifie éventuellement la casse */
                else if (myarray[i][1].indexOf('c')>-1) {
                        var noble = new Array(" d\'", "de","von","van","der","d","la","da","of");
                        var newvalue='';
                        var myvalue = field.value.split(/\b/);
                        for (k=0;k<myvalue.length;k++) {
                                newvalue+= myvalue[k].substr(0,1).toUpperCase()+myvalue[k].substring(1);
                        }
                        for(k = 0; k < noble.length; k++){
                                var reg = new RegExp ("\\b"+noble[k]+"\\b","gi");
                                newvalue = newvalue.replace(reg,noble[k]);
                        }
                        field.value = newvalue;
                }
        }
        
        /*      En cas d'erreur, les messages d'erreur récoltés sont exploités ici puis affichés.
                Si le formulaire est correctement rempli, il est transmis */
        if (error) {
                message_erreur = message_erreur.join('\n\xB7 ');
                alert(message_erreur);
                return false;
        } else {
                return true;
        }
}