IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

regexp de validation date et heure


Sujet :

JavaScript

  1. #1
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut regexp de validation date et heure
    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)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    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

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Je pense que ton expression est assez permissive. Celle-ci devrait être plus adaptée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/[0-9]{4}$"
    Avec les hh:mm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/[0-9]{4} ([01][0-9]|2[0-3]):([0-5][0-9])$"

  3. #3
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut
    merci de ta réponse

  4. #4
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut
    la même chose avec des fonctions javascripts (ça permet notamment de tester les années bissextiles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    		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]));
    		}

    merci skywalk3r


  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    y'avait ça doans notre FAQ ou dans les codes source ...

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Janvier 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Salut tous,

    je déterre le sujet en ajoutant que le parseInt() est un peu violent, tel que. Vaut mieux lui préciser qu'on est en base 10, car le 0 non significatif le fait partir en base 8 (octal) pour le mois d'août par exemple... ooops !

    Remplacer tous les parseInt comme suit (ajouter ,10) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var iDay = parseInt(arDate[0],10);

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    var iDay = arDate[0]*1;

  8. #8
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut
    Hello,

    d'accord avec toi armlis, si on utilise parseInt il faut préciser la base 10 (j'me suis déjà fait avoir)

    Et perso je préfère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var iDay = parseInt(arDate[0],10);
    à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var iDay = arDate[0]*1;
    A+
    PoichOU

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Points : 496
    Points
    496
    Par défaut
    Et d'ailleurs pour tester une date, rien ne vaut de faire un new Date() et de retester les valeurs entrantes avec les valeurs de date via getDate(), getMonth(), getYear()

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    Je plussoie Duke dans le sens ou une regexp ne peut valider qu'un format et non un type.
    Une reg validera le 31/02/2012

    mais rien de nouveau sous le soleil: En 2003, JavaTwister nous proposait déja ceci :
    http://www.developpez.net/forums/d14...ce/#post878767

  11. #11
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Points : 496
    Points
    496
    Par défaut
    Au passage voila le code à quoi je faisais allusion, oui je l'ai réduit au strict minimum mais il fait très bien son job

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    function dateValidate(y,m,d) {
        y=y*1;m=m*1-1;d=d*1;
        with(new Date(y,m,d))
            return getFullYear()==y && getMonth()==m && getDate()==d;
    }
     
    function dateStrValidate(str) {
        var a=str.match(/(\d+)/g);
        return dateValidate(a[0],a[1],a[2]);
    }
     
    dateValidate(2011,2,29) => false
    dateValidate(2012,2,29) => true
    dateStrValidate("2012/02/29") => true
    dateStrValidate("2012-02-29") => true
    dateStrValidate("2011-02-29") => false;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Validation de la date avec heure
    Par Bes74 dans le forum VBA Access
    Réponses: 1
    Dernier message: 18/03/2014, 08h38
  2. Réponses: 3
    Dernier message: 24/03/2012, 10h54
  3. récupérer la date et heure système
    Par Rnx69 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/06/2005, 15h43
  4. [date et heure] convertion d'une date en chaîne
    Par jean-jacques varvenne dans le forum SQL
    Réponses: 5
    Dernier message: 23/03/2005, 11h31
  5. Manipulations de dates et heures
    Par benj63 dans le forum C++
    Réponses: 5
    Dernier message: 16/12/2004, 15h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo