/** * Scripts requis : * ajax/DOM.js (pour la fonction get_elements_selon_nom_de_classe() ) * getelement.js pour la fonction getelement() * ajax/chaine.js pour la fonction telephone_formate() */ /** * FONCTIONS DE VALIDATION D'UN FORMULAIRE */ /** * Vérifie que tous les champs de saisie obligatoires (possédant une class="ps_nom_classe_obligatoire") * ne sont pas vides. La classe des champs vides est changée pour signaler que le champ doit être rempli. * * @param string ps_id_form l'identifiant du formulaire * @param string ps_nom_classe_obligatoire le nom de la classe CSS qui indique que les champs est obligatoire * @param string ps_nom_classe_manquante le nom de la classe CSS qui indique que les champs doit être renseigné * * @return boolean true si tous les champs sont bien remplis, false sinon */ function verifier_champs_obligatoires_selon_css( ps_id_form, ps_nom_classe_obligatoire, ps_nom_classe_manquante ) { // Récupération du formulaire var lfrm = getelement( ps_id_form ); // Récupération de tous éléments (notamment input, textarea) de classe obligatoire (ou de classe manquante) var lelma_champs_requis = get_elements_selon_nom_de_classe( ps_nom_classe_obligatoire, '*', ps_id_form ); lelma_champs_requis = lelma_champs_requis.concat( get_elements_selon_nom_de_classe(ps_nom_classe_manquante, '*', ps_id_form) ); var lia_champs_obligatoires_manquants = new Array(); for( var i=0; i 0 ) { lelma_champs_requis[lia_champs_obligatoires_manquants[0]].focus(); alert( "Vous avez oublié de renseigner " + li_nb_champs_obligatoires_manquants + " champ" + ((li_nb_champs_obligatoires_manquants>1)?"s":"") + " d'information." ); return false; } else { return true; } } /** * Vérifie qu'un formulaire a les champs requis de renseignés et affiche un alert pour chaque champ vide * * @param string ps_id_form l'identifiant du formulaire * @param array psa_champs_requis tableau assoc avec K=name d'input (membres du formulaire) qui doivent être renseignés, V=libellé du champ * @return boolean true si tous les champs sont bien remplis, false sinon */ function formulaire_valider( ps_id_form, psa_champs_requis ) { lfrm = getelement( ps_id_form ); for( ls_champ in psa_champs_requis ) { if( ls_champ!='indexOf' && lfrm.elements[ls_champ] ) { if( !lfrm.elements[ls_champ].value ) { alert("Vous devez saisir "+ psa_champs_requis[ls_champ] ); lfrm.elements[ls_champ].focus(); return false; } } } return true; } /** * Si l'élément ps_nom_element existe, valide le format du contenu de l'élément * (délègue le traitement à valide_selon_type), sinon retourne true * * @param form pfrm_formulaire formulaire contenant * @param string ps_nom_element nom de l'élément à tester * @param string ps_type type, une valeur parmi [N|F|D|DT|EM|TL|CP] * @param string ps_message message si la valeur n'est pas au bon format * * @return boolean true si le format du contenu du champ est valide */ function champ_valide_selon_type( pfrm_formulaire, ps_nom_element, ps_type, ps_message ) { var lelt_element = pfrm_formulaire.elements[ ps_nom_element ]; if( ! lelt_element ) { return true; } else { return valide_selon_type( ps_type, lelt_element.value, ps_message ); } } /** * Valide le format de la valeur passée selon les règles de format du type passé. * Affiche le message passé en parametre si la valeur ne correspond pas au type. * Renvoie true si la valeur est vide * * @param pType type [N|F|D|DT|EM|TL|TP|CP] * @param pValue valeur à vérifier * * @return boolean true si la valeur est au bon format ou si elle est vide */ function valide_selon_type( pType, pValue, pMessage ) { if( pValue.length == 0 ) { return true; } var lb_result = true; switch( pType ) { case 'I' : ; case 'N' : lb_result = valeur_format_numerique( pValue ); break; case 'F' : lb_result = valeur_format_decimal( pValue ); break; case 'D' : lb_result = valeur_format_date( pValue ); break; case 'DT' : lb_result = valeur_format_date_et_heure( pValue ); break; case 'EM' : lb_result = valeur_format_email( pValue ); break; case 'URL': lb_result = valeur_format_url( pValue ); break; case 'TL' : lb_result = valeur_format_telephone( pValue ); break; case 'TP' : lb_result = valeur_format_telephone_mobile( pValue ); break; case 'CP' : lb_result = valeur_format_code_postal( pValue ); break; } if( (pMessage != null) && !lb_result ) { alert( pMessage ); } return lb_result; } /** * Vérifie qu'une chaine ne contient que des chiffres * @param string pValue chaine à vérifier * @return true si la chaine est valide, false sinon */ function valeur_format_numerique( pValue ) { var reg = new RegExp( "^\\d+$", "i" ); return reg.test( pValue ); } /** * Vérifie qu'une chaine ne contient qu'un séparateur decimal et des chiffres des deux côtés * @param string pValue chaine à verifier * @return boolean true si la chaine est valide, false sinon */ function valeur_format_decimal( pValue ) { var reg = new RegExp( "^\\d+([\\.|,]\\d+)?$", "i" ); return reg.test( pValue ); } /** * Vérifie qu'une chaine ne contient qu'un Email * @param string pValue chaine à verifier * @return boolean true si la chaine est valide, false sinon */ function valeur_format_email( pValue ) { var re_email = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$/ ; return re_email.test( pValue ); } /** * Vérifie qu'une chaine ne contient qu'une url * @param string pValue chaine à verifier * @return boolean true si la chaine est valide, false sinon */ function valeur_format_url( pValue ) { var re_url = new RegExp( "[_a-z0-9-]+\.[_a-z0-9-]+\.[a-zA-Z]{2,4}[0-9]*(?:/.*)?$", "g" ) ; return re_url.test( pValue ); } /** * Vérifie que la chaîne fournie est un numéro de téléphone valide * @param string pValue chaine à verifier * @return boolean true si on a réussi à déduire un numéro de téléphone valide */ function valeur_format_telephone( pValue ) { lb_telephone_valide = ( telephone_formate(pValue, ' ').length > 0 ); return lb_telephone_valide; } /** * Vérifie que la chaîne fournie est un numéro de téléphone portable valide * @param string pValue chaine à verifier * @return boolean true si on a réussi à déduire un numéro de téléphone portable valide */ function valeur_format_telephone_mobile( pValue ) { lb_telephone_valide = ( telephone_mobile_formate(pValue, ' ').length > 0 ); return lb_telephone_valide; } /** * Vérifie qu'une chaine est un code postal métropolitain+Corse * Source = http://www.developpez.net/forums/d518232/webmasters-developpement-web/javascript/regexp-code-postal-cette/#post3105319 * @param string pValue chaine à verifier * @return boolean true si la chaine est valide, false sinon */ function valeur_format_code_postal( pValue ) { var re_code_postal = /^((0[1-9])|([1-8][0-9])|(9[0-8])|(2A)|(2B))[0-9]{3}$/; return re_code_postal.test( pValue ); } /** * Vérifie qu'une chaine ne contient qu'une Date JJ/MM/AAAA * pValue chaine à verifier * * return true si la chaine est valide, false sinon */ function valeur_format_date( pValue ) { var reg = new RegExp("^([0-2]\\d|3[0-1])/(0\\d|1[0-2])/\\d{4}$", "i"); return reg.test(pValue); } /** * Vérifie qu'une chaine ne contient qu'une Date JJ/MM/AAAA HH:MM:SS * pValue chaine à verifier * * return true si la chaine est valide, false sinon */ function valeur_format_date_et_heure( pValue ){ var reg = new RegExp("^([0-2]\\d|3[0-1])/(0\\d|1[0-2])/\\d{4} ([0-1]\\d|2[0-3]):[0-5]\\d(:[0-5]\\d)?$", "i"); return reg.test(pValue); }