Valider une date entrée dans un input text sans ajouter de séparateurs : jmaa, jmaaaa etc...

Description

Valider une date entrée dans un input text sous la forme : jmaa, jmaaaa, jmmaa, jmmaaaa, jjmaa, jjmaaaa, jjmmaa, ou bien jjmmaaaa
et qui est supérieure ou égale au 01/01/1800.

Normalement fonctionne sous IE, sous NS pas testé...

REMARQUE(S) :
1. L'utilisation de séparateurs (- / _ etc...) est facultative.

Source / Exemple :


function date_valid(iText)
	{
	iVal = iText.value;
	
	regT = new Array(
		/^([1-9])\D?([1-9])\D?((18|19|20)?\d{2})$/, // ex : 5 5 1800, 1 1 2002 (05-05-1800, 01-01-2002)
		/^([1-9])\D?(1[0-2])\D?((18|19|20)?\d{2})$/, // ex : 5 11 1800, 1 10 2002 (05-11-1800, 01-10-2002)
		/^([1-3]0)\D?([1-9])\D?((18|19|20)?\d{2})$/, // ex : 10 3 2001, 30 6 1911 (10-03-2001, 30-06-1911)
		/^(0[1-9]|[1-3][1-9])\D?([1-9])\D?((18|19|20)?\d{2})$/, // ex : 09 3 2001, 31 6 1911 (09-03-2001, 31-06-1911)
		/^(0[1-9]|[1-3][0-9])\D?(0[1-9]|1[0-2])\D?((18|19|20)?\d{2})$/ // ex : 10 02 2000, 39 12 1999 (10-02-2000, 39-12-1999)
		);
	
	if(iVal)
		{
		isReg=false;
		for(i=0; i<regT.length; i++)
			if( isReg = regT[i].test(iVal) )
				{
				regT[i].exec(iVal);
				break;
				}

		if(isReg)
			{
        		d = RegExp.$1; m = RegExp.$2; y = RegExp.$3;
			theDate = new Date();
			if(d.length==1) d = '0'+d; if(m.length==1) m = '0'+m;
			if(y.length==2) y = ( y > String(theDate.getYear()).substr(2,2) ) ? '19'+y : '20'+y;
			iText.value = d+'-'+m+'-'+y;
			
			mT = new Array("janvier","février","mars","avril","mai","juin",
					"juillet","août","septembre","octobre","novembre","décembre");
			
			reg = /^(0?[1-9]|[1-3][0-9])\D?(0?[1-9]|1[0-2])\D?((18|19|20)\d{2})$/;		
			reg.exec(iText.value);
			if( parseInt(RegExp.$1) > nbJMonth(RegExp.$3,RegExp.$2) )
				{
        			alert('LA DATE ENTRÉE N\'EXISTE PAS...il y a '+nbJMonth(RegExp.$3,RegExp.$2)+' jours pour le mois de '+mT[RegExp.$2-1]+' ('+RegExp.$3+').');
        			iText.value = '-'+RegExp.$2+'-'+RegExp.$3;
        			iText.focus(); return;
        			}
                	}
                	else
                	{
        		alert('FORMAT DE DATE ERRONÉ...\n\nLes formats valides sont :\n\tjmaa\n\tjmaaaa\n\tjmmaa\n\tjmmaaaa\n\tjjmaa\n\tjjmaaaa\n\tjjmmaa\n\tjjmmaaaa \net où l\'année est supérieure à 1800.\n\n\nREMARQUE(S) :\n1. L\'utilisation de séparateurs (- \/ _ etc...) est facultative.');
        		iText.focus(); return;
        		}
        	}
	}
	
	function isBissext(theY) { return ( theY % 4 == 0 && (theY % 100 !=0 || theY % 400 ==0) ); }
	function nbJMonth(theY,theM)
		{ 
		jpm = ['',31,[28,29],31,30,31,30,31,31,30,31,30,31];
		theM = parseInt(theM);
		if(theM==2) return isBissext(theY) ? jpm[theM][1] : jpm[theM][0];
		else return jpm[theM];
		}

Conclusion :


Merci d'avance pour vos suggestions d'améliorations, pour les bugs qui peuvent se présenter, etc...

Codes Sources

A voir également

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.