fonction verifdate

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : fonction verifdate

Re: fonction verifdate

par macgawel » 10 janv. 2011, 19:18

J'ai l'impression que tu te compliques les choses.

1. Décompose :
Utilises une fonction RecupDate (element), une fonction VerifDate(jours,mois,annee) et une fonction calculAge(date) - en plus tu pourras réutiliser ton code :D

2. Il est vraiment nécessaire de laisser les gens mettre le format qu'ils veulent ?
C'est assez rare de pouvoir rentre ce qu'on veux, en général on nous demande de saisir la date au format JJ/MM/AAAA (par exemple)
Si c'est vraiment indispensable, tu peux simplifier un peu cette partie du code (en partant du principe que l'utilisateur utilise toujours le même séprateur et écrit sa date au format français, pas américain MM/JJ/AAAA) :

Code : Tout sélectionner

function RecupDate(element,id1) { /* Il faudrait tester plus précisément le contenu (existance, longueur, etc.) on teste si le 3ème caractère est un chiffre Si non, c'est le séparateur Si oui, il n'y a pas de séparateur */ var tmp = document.forms["result_rpfa"].elements[element].value; var separateur = tmp[2]; if (isNaN(separateur)) { TabChaine = machaine.split(sep); } else { TabChaine[0] = tmp.substr(0,2); TabChaine[1] = tmp.substr(2,2); TabChaine[2] = tmp.substr(4); } if (TabChaine[2].length == 2) { TabChaine[2] = "20" + TabChaine[2]; } }
Ensuite, il faut tester ta date.
Pour ça, il y a une astuce à connaître :
JS est capable de calculer une date à partir de n'importe quels nombres, et d'en faire une correcte.
Par exemple, si tu lui refiles le 32/12/2010, il va créer la date du 01/01/2011 (31/12/2010 + 1 jour).
=> il suffit de comparer les trois valeurs données (jours, mois, années) de ta date de départ avec la date créée à partir d'eux.

Code : Tout sélectionner

function verif(j,m,a){ m=m-1; d=new Date(a,m,j); if (d.getFullYear()!=a || d.getMonth()!=m ||d.getDate() !=j) { alert ("la date n'est pas bonne"); } }
Ce n'est pas moi qui ai trouvé ce code, je l'avais récupéré sur le net mais je ne sais plus où :oops:

Re: fonction verifdate

par stealth35 » 05 janv. 2011, 12:20

qu'est ce qui marche plus ? y'a quoi comme message d'erreur dans la console javascript ?

fonction verifdate

par kratos60 » 31 déc. 2010, 12:01

bonjour a tous,

J'ai eu un petit plantage de PC hier et du coup ma page php que je codais est vierge (aller savoir pourquoi...).
Seulement j'ai reussi a recuperer ma fonction verifdate mais elle marche plus...

Je la poste pour voir si un oeil exterieur voit le probleme car pour moi elle est identique a celle d'avant.

Code : Tout sélectionner

function verifDate(element,id1) { var tmp = document.forms["result_rpfa"].elements[element].value; var regsymbol = new RegExp("[ /-]","g"); //verif de la pr�sence d'espace (01 12 2004), de / (01/12/2004) ou de - (01-12-2004) var regnum = new RegExp("[0-9]{6,8}","g"); //type 011204 ou 01122004 var jour = 0; var mois = 0; var annee = 0; var res = false; var ladate = new Date(); var annee_courante = ladate.getFullYear().toString(); var age_enfant; if (tmp != "") { var taille = tmp.length; var bool_num = regnum.test(tmp); var bool_symbol = regsymbol.test(tmp); if (bool_num) { switch(taille) { case 6: // cas 011204 jour = tmp.substr(0,2); mois = tmp.substr(2,2); annee = annee_courante.substr(0,2) + tmp.substr(4,2); break; case 8: // cas 01122004 jour = tmp.substr(0,2); mois = tmp.substr(2,2); annee = tmp.substr(4,4); } } else { if (bool_symbol) { switch(taille) { case 8: // cas 01/12/04 jour = tmp.substr(0,2); mois = tmp.substr(3,2); annee = annee_courante.substr(0,2) + tmp.substr(6,2); break; case 10: // cas 01/12/2004 jour = tmp.substr(0,2); mois = tmp.substr(3,2); annee = tmp.substr(6,4); } } } if ((jour != 0) && (mois != 0) && (annee != 0)) { if ((mois == 1) || (mois == 3) || (mois == 5) || (mois == 7) || (mois == 8) || (mois == 10) || (mois == 12)) // mois � 31 jours { if (jour < 32) { res = true; } } if ((mois == 4) || (mois == 6) || (mois == 9) || (mois == 11)) // mois � 30 jours { if (jour < 31) { res = true; } } if (mois == 2) // 28 ou 29 jours selon ann�e bisextille { if ((annee % 4) == 0) { if (jour < 30) { res = true; } } else { if (jour < 29) { res = true; } } } } if (res) { document.forms["result_rpfa"].elements[element].value = jour + "/" + mois + "/" + annee; if (mois < 7) // date de naissance au 31/12 le plus proche est le 31/12 de l'ann�e pr�c�dente. { age_enfant = 2010 - annee + 1; } else // date de naissance au 31/12 le plus proche est le 31/12 de l'ann�e en cours. { age_enfant = 2010 - annee; } //prendre indice ("date" + i) afin de remplir la case age correspondante ("age" + i) if (age_enfant < 0) { document.forms["result_rpfa"].elements[id1].value = 0; } else { document.forms["result_rpfa"].elements[id1].value = age_enfant; } } else { alert("La date de naissance entr�e n'est pas valide\n(elle doit �tre de la forme jj/mm/aaaa)"); document.forms["result_rpfa"].elements[element].focus(); } } //return res; }
Merci d'avance