Controle des dates [Résolu]

Messages postés
414
Date d'inscription
lundi 19 juillet 2004
Dernière intervention
23 septembre 2014
- - Dernière réponse : syndrael
Messages postés
2382
Date d'inscription
lundi 4 février 2002
Dernière intervention
29 décembre 2012
- 4 mai 2006 à 19:23
Salut
Je débute et j'ai voulu faire une fonction qui vérifie à la volée la date saisie dans un input.
Pour l'instant je n'ai pas traité les années bissextiles ni fevrier mais le code est déjà lourd.
En plus dans certains cas le curseur ne suis pas quand on rajoute des caractères...
Aidez moi svp

Voila le code (Très lourd):
function verifDate(object, sep) { //sep est le séparateur choisi
var re = /^[0-9]$/; //Expression régulière
var re2 = /^[0-3]$/; //Expression régulière
var re3 = /^[4-9]$/; //Expression régulière
var re4 = /^[0-1]$/; //Expression régulière
var re5 = /^[2-9]$/; //Expression régulière
var re6 = /^[02]$/; //Expression régulière
var re7 = /^[13578]$/;
var re8 = /^[0-2]$/; //Expression régulière
var re9 = /^[1-9]$/; //Expression régulière
var tmp = ""; //Tampon 1
var tmp2 = ""; //Tampon 2
var ch = object.value.toString(); //Récupération de la valeur à tester
if (ch != "") { //Si elle est pas vide (Evite une erreur si on efface ce qu'on a tapé)
for (i=0; i<ch.length; i++) { //On la parcoure <== Début boucle
switch (i) { //Pour chaque element...............
case 0:
if (re2.test(ch.charAt(i))) tmp += ch.charAt(i); //Si le 1er chiffre est 0, 1, 2 ou 3 on le garde
else if (re3.test(ch.charAt(i))) tmp += ("0" + ch.charAt(i) + sep); //Si il est > 3 on met un 0 devant
break;

case 1:
if (tmp.charAt(0) == "3") { //Si le 1er chiffre est 3
if (re4.test(ch.charAt(i))) tmp += (ch.charAt(i) + sep); //Le 2eme ne peut être que 0 ou 1
} else {
tmp += (ch.charAt(i) + "/"); //Sinon on garde le 2eme et on ajoute le séparateur
} break;

case 3:
if (re4.test(ch.charAt(i))) tmp += ch.charAt(i); //On autorise que les caractères 0 et 1
else if (re5.test(ch.charAt(i))) { //Sinon (pas seulement else pour pas mettre des lettres ou autre...)
if (tmp.charAt(0) == "3") {
if (tmp.charAt(1) == "1") { //Si on a mis le 31
if (re7.test(ch.charAt(i))) tmp += ("0" + ch.charAt(i) + sep);//On peut mettre que certains mois
} else {
if (re9.test(ch.charAt(i))) tmp += ("0" + ch.charAt(i) + sep);
}
} else {
if (re9.test(ch.charAt(i))) tmp += ("0" + ch.charAt(i) + sep);
}
}
break; //Dans tous les cas si c'est pas 0 ou 1 on rajoute un 0 devant

case 4: // <== Marche comme le case du dessus
if (tmp.charAt(0) == "3") {
if (tmp.charAt(1) == "1") {
if (tmp.charAt(3) == "1") {
if (re6.test(ch.charAt(i))) tmp += (ch.charAt(i) + sep);
} else {
if (re7.test(ch.charAt(i))) tmp += (ch.charAt(i) + sep);
}
} else {
if (tmp.charAt(3) == "1") {
if (re8.test(ch.charAt(i))) tmp += (ch.charAt(i) + sep);
} else {
if (re9.test(ch.charAt(i))) tmp += (ch.charAt(i) + sep);
}
}
} else {
if (tmp.charAt(3) == "1") {
if (re8.test(ch.charAt(i))) tmp += (ch.charAt(i) + sep);
} else {
if (re9.test(ch.charAt(i))) tmp += (ch.charAt(i) + sep);
}
}
break;

default:
if (re.test(ch.charAt(i))) { //Si elle vérifie l'expression régulière
if (tmp.length 2 || tmp.length 5) tmp += sep; //On ajoute le / si on est au bon endroit
tmp += ch.charAt (i); //On insère les chiffres
} break;
}
} // <== Fin boucle
if (tmp.length > 10) { //Si ya trop de chiffres
for (i=0; i<10; i++) tmp2 += tmp.charAt(i); //On parcour juste la longueur nécessaire
} else { tmp2 = tmp; } //Sinon on récupère directement la valeur
object.value = tmp2; //On met à jour le input
}
}
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
2382
Date d'inscription
lundi 4 février 2002
Dernière intervention
29 décembre 2012
3
Merci
juste un exemple
http://www.mattkruse.com/javascript/calendarpopup/

Le deuxième select devrait te convenir. Il te faudra juste modifier le code pour faire apparaitre la date au format français..

S.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 105 internautes nous ont dit merci ce mois-ci

Commenter la réponse de syndrael
Messages postés
2382
Date d'inscription
lundi 4 février 2002
Dernière intervention
29 décembre 2012
0
Merci
Ne cherche plus !! J'ai ton bonheur..

Cliqueici tu vas comprendre.. Assez des algos et des années bissextiles !!

S.
Commenter la réponse de syndrael
Messages postés
414
Date d'inscription
lundi 19 juillet 2004
Dernière intervention
23 septembre 2014
0
Merci
Nickel:)
Mais la ou je galère c'est au moment de la saisie:
Par exemple si on tape 31 un '/' se rajour automtiquement. Ca ca marche
Mais apres il faut pas qu'on puisse par exemple taper 11 parceque le 31 novembre ca existe pas.
Ca marche à peu pres mais le curseur ne suis pas les caractères qui se rajoutent et du coup les chiffres qu'on tape sont insérés au mauvais endroit:(
Commenter la réponse de cs_ov3rdoze
Messages postés
2382
Date d'inscription
lundi 4 février 2002
Dernière intervention
29 décembre 2012
0
Merci
Ouh là !! Tu fais de la saisie auto-complétée !! Bon courage.. Je te
conseille alors de faire appel à des calendriers.. kom le site
www.voyages-sncf.fr. Tu cliques sur le calendrier tu es sur de ne rien
frappé d'incorrect.

Perso pour le saisie je te coseille de lancer ta vérification de date
une fois la case de saisie quittée donc par le biais d'un

S.
Commenter la réponse de syndrael
Messages postés
414
Date d'inscription
lundi 19 juillet 2004
Dernière intervention
23 septembre 2014
0
Merci
ok merci vais chercher de ce coté
Commenter la réponse de cs_ov3rdoze
Messages postés
414
Date d'inscription
lundi 19 juillet 2004
Dernière intervention
23 septembre 2014
0
Merci
Terrible!!!
J'avais essayé de faire un truc dans le genre mais j m'en etais pas sorti. C exactement ce qui faut
Merci
Commenter la réponse de cs_ov3rdoze
Messages postés
11
Date d'inscription
lundi 6 mars 2006
Dernière intervention
9 février 2009
0
Merci
Salut !

Je reviens sur un truc qui a été dit, les fameux calendriers sur www.voyage-sncf.com, comment on les fait ?
Ou est-ce que je pourrais trouver un truc de ce genre ?
Merci
@+

Sayann
Commenter la réponse de cs_sayann
Messages postés
2382
Date d'inscription
lundi 4 février 2002
Dernière intervention
29 décembre 2012
0
Merci
Regarde le lien du dessus.. C'est exactement ça..

Je te le redonne..

http://www.mattkruse.com/javascript/calendarpopup/

S.
Commenter la réponse de syndrael

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.