function IsDate(d)
{
  if (d == "") // si la variable est vide on retourne faux
    return false;
  
  e = new RegExp("^\\d{2}\/\\d{2}\/\\d{4}$");
  
  if (!e.test(d)) // On teste l'expression régulière pour valider la forme de la date
    return false; // Si pas bon, retourne faux
 
  // On sépare la date en 3 variables pour vérification, parseInt() converti du texte en entier
  j = parseInt(d.split("/")[0], 10); // jour
  m = parseInt(d.split("/")[1], 10); // mois
  a = parseInt(d.split("/")[2], 10); // année
 
  // Définition du dernier jour de février
  if (a%4 == 0 && a%100 !=0 || a%400 == 0) fev = 29;
  else fev = 28;
 
  // Nombre de jours pour chaque mois
  nbJours = new Array(31,fev,31,30,31,30,31,31,30,31,30,31);
 
  // Enfin, retourne vrai si le jour est bien entre 1 et le bon nombre de jours, idem pour les mois, sinon retourn faux
  return ( m >= 1 && m <=12 && j >= 1 && j <= nbJours[m-1] );
}


// Accepte une chaine vide
var regExpEmpty = new RegExp( "^$", "gi" );
// Accepte une chaine ne contenant que des espaces blancs donc \f\n\t\v et des espaces
var regExpSpace = new RegExp( "^\\s+$", "gi" ); 

/*** Expressions régulières de test de type de caractère ***/
// Accepte une chaine alphanumérique + underscore
var regExpAlphanumeric = new RegExp( "^\\w+$", "gi" );
// Accepte une chaine alphanumérique +  underscore + '-'
var regExpAlphanumericWithTiret = new RegExp( "^[\\w\-]+$", "gi" ); 
// Accepte une chaine alphabétique
var regExpAlphabetic = new RegExp( "^[a-zA-Z]+$", "gi" ); 

/*** Expressions régulières de test d'identification d'un internaute ***/
// Accepte une chaine alphanumérique + underscore + '-' de 8 caractères
var regExpLogin = new RegExp( "^[\\w\-]{8}$", "gi" );
// Accepte une chaine numérique de 6 caractères
var regExpMdp = new RegExp( "^\\d{6}$", "gi" ); 

/*** Expressions régulières de test de type ***/
// N'Accepte qu'une chaine de type 'int'
var regExpInt = new RegExp( "^\\d+$", "gi" );
// N'Accepte qu'une chaine de type 'double'
var regExpDouble = new RegExp( "^[-+]?\\d+(\\.\\d+)?$", "gi" );
// N'Accepte qu'une chaine de type 'float'
var regExpFloat = new RegExp( "^[-+]?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$", "gi" );

/*** Expressions régulières de test de types administratifs français ***/
// Accepte une chaine de type 'code postal'. Ex : F-33370 ou 33 370 ou 33370 ou F-1 370
var regExpCodePostal = new RegExp( "^\\d{5}$", "gi" ); 
// Accepte un numero de téléphone national (fixe ou portable). Ex : 0134125230
var regExpTelephone= new RegExp( "^(0[1|2|3|4|5|6|8])\\d{8}$", "gi" ); 

/*** Expressions régulières de test de types liés à internet ***/
// Accepte une adresse email. Ex : toto@toto.com 
var regExpEmailAdress = new RegExp ( "^\\w+([\\.|\\-]\\w+)*@\\w+([\\.|\\-]\\w+)*\\.\\w+$" , "gi" ); 
// Accepte une url http ou https, avec ou sans numero de port. Ex : http://www.toto.com, ftp://toto:toto@ftp.toto.com:21/
var regExpUrl = new RegExp ( "^http(s?):\/\/(\\S+)$", "gi" );

//Les deux fonction suivantes servent à identifier si une chaine de caractère est compatible ou non avec une expression régulière passée en paramètre
function matchRegularExpression(valeur, regularExpression)
{
	var resultat = valeur.match(regularExpression);
	if(resultat!=null && resultat.length==1) return true;
	else return false;
}

function doesntMatchRegularExpression(valeur, regularExpression)
{
	if(matchRegularExpression(valeur, regularExpression)) return false;
	else return true;
}

/*
les fonctions de contrôle suivantes prennent toutes comme argument la valeur de l'attribut "value" d'un champ de formulaire de type "text" ou "password"
*/
function isEmpty(valeur)
{
	return matchRegularExpression(valeur, regExpEmpty);
}

function isNotEmpty(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpEmpty);
}

function isSpace(valeur)
{
	return matchRegularExpression(valeur, regExpSpace);
}

function isNotSpace(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpSpace);
}

function isNotAlphanumeric(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpAlphanumeric);
}

function isNotAlphanumericWithTiret(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpAlphanumericWithTiret);
}

function isNotAlphabetic(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpAlphabetic);
}

function isNotLogin(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpLogin);
}

function isNotMdp(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpMdp);
}

function isNotInt(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpInt);
}

function isNotDouble(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpDouble);
}

function isNotFloat(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpFloat);
}

function isNotCodePostal(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpCodePostal);
}

function isNotTelephone(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpTelephone);
}

function isNotEmailAdress(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpEmailAdress);
}

function isNotUrl(valeur)
{
	return doesntMatchRegularExpression(valeur, regExpUrl);
}