11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous

j'ai trouvé un code sur internet qui me permet de valider une date au format dd/MM/yyyy (exemple : 21/03/2007)

var dateString = "21/03/2007";
var reg=new RegExp("^[0-9]{2}[/]{1}[0-9]{2}[/]{1}[0-9]{4}$","g");
reg.test(dateString);


je voudrais la même chose pour un format dd/mm/yyyy mm:hh

quelqu'un pourrais me dire ce que je dois rajouter ?


merci
PoichOU
Salut,

ton code ne valide pas une date puisqu'il sera positif avec une date "37/14/2008".

de plus dans une regexp "{1}" ne sert à rien.
De même pour les crochets autour du "/".

Bref, il faut faire attention aux codes sur internet. Smiley cligne
ouai tu as raison je viens de tester !!! Smiley eek Smiley eek

quelle misère ... Smiley sweatdrop je ne connais pas du tout, c'est pour ça que j'ai fouiller sur internet ... erf

tu saurais comment faire ?
ben je pense pas qu'une regexp suffise.

J'avais fait une fonction php qui verifiais une date je viens de te la convertir en JS.

		function isDate(sDate){
			var sSeparator = '/';
			if(!sDate.match("^[0-9]{2}/[0-9]{2}/[0-9]{4}$")) return false;
			var arDate = sDate.split(sSeparator);
			var iDay = parseInt(arDate[0]);
			var iMonth = parseInt(arDate[1]);
			var iYear = parseInt(arDate[2]);
			var arDayPerMonth = [31,(isLeapYear(iYear))?29:28,31,30,31,30,31,31,30,31,30,31];
			if(!arDayPerMonth[iMonth-1]) return false;
			return (iDay <= arDayPerMonth[iMonth-1] && iDay > 0);
		}
		
		function isHour(sHour){
			var sSeparator = ':';
			var withSeconds = false;
			if(sHour.match("^[0-9]{2}:[0-9]{2}:[0-9]{2}$")) var withSeconds = true;
			else if(!sHour.match("^[0-9]{2}:[0-9]{2}$")) return false;
			var arHour = sHour.split(sSeparator);
			var iHour = parseInt(arHour[0]);
			var iMinute = parseInt(arHour[1]);
			if(withSeconds)	var iSecs = parseInt(arHour[2]);
			else 						var iSecs = 0;
			return 	(iHour >= 0 && iHour < 24) && (iMinute >= 0 && iMinute < 60) && (iSecs >= 0 && iSecs < 60);
		}
		
		function isLeapYear(iYear){
			return ((iYear%4==0 && iYear%100!=0) || iYear%400==0);
		}
		
		function isDateHour(sDateHour){
			var sSeparator = ' ';
			var arDateHour = sDateHour.split(sSeparator);
			return (arDateHour[0] && arDateHour[1] && isDate(arDateHour[0]) && isHour(arDateHour[1]));
		}


Elle fonctionne uniquement avec un format "dd/mm/yyyy hh:mm" ou "dd/mm/yyyy hh:mm:ss".

exemple d'utilisation :

isDateHour('29/02/2008 23:59:16');


Il y a surement beaucoup plus simple mais elle fonctionne. Smiley cligne
Slt PoichOU,

Je ss pas vraiment meilleur que toi en Regex, mais j'ai essayé de faire quelque chose. Il faut demandé a un pro du Regex si c'est optimisé, mais en tout cas ca a l'air de marcher a peu près!

Je sais pas trop si les parenthèses sont légitimes ou pas, mais je savais pas quoi mettre d'autre sachant que si je les remplacent par des crochets ca marche pas!

Voici le Motif:
^([0-2]{1}[0-9]{1}|[3]{1}[0-1]{1})/(0[1-9]{1}|1[0-2]{1})/[0-9]{4}$



+++
^([0-2]{1}[0-9]{1}|[3]{1}[0-1]{1})/(0[1-9]{1}|1[0-2]{1})/[0-9]{4}$

équivaut à :
^([0-2][0-9]|3[0-1])/(0[1-9]|1[0-2])/[0-9]{4}$


cette regexp ne convient pas car elle ne teste pas l'heure et ne teste pas les années bissextiles (ce qui je pense est difficile avec une regexp Smiley sweatdrop )

edit : de plus on peut mettre des jours et des mois en "00" Smiley biggol
Modifié par skywalk3r (13 Mar 2008 - 16:03)
@maxroucool : bien vu car ton truc marche.

@skywalk3r : bien vu le coup des années bissextiles ! j'ai commencé par codé la soluce de maxroucool et puis finalement je suis revenu vers tes fonctions js. En plus j'ai juste eu à copier-coller Smiley biggrin


merci à vous 2


PoichOU
OK!
J'aurais essayé!

C'est vrai que pour les années bissextiles ca aurait été dur ac un regex!
Sinon pour les "00", j'avais vu le problème. J'ai réussi à le palier pour les mois ac "0[1-9]", mais pour les jours ca aurait encore alourdi le motif!


+++