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 :

date complète ou non [RegExp]


Sujet :

JavaScript

  1. #1
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 494
    Points : 3 129
    Points
    3 129
    Par défaut date complète ou non
    Bonjour,

    Je voudrais valider "en live" la validité de la saisie d'une dqate dans un input text. Je cherche donc une expression régulière pour faire ça à chaque onkeypress. Mais .... (sinon, ça serait trop facile ) ... je voudrais que la validité soir reconnue quelle que soit la longueur de la saisie. Plus en détails:

    1 chiffre = valide
    2 chiffres = valide
    3 chiffres = invalide
    1 chiffres et un / = valide
    2 chiffres et un / = valide
    etc ....

    sur un format final JJ/MM/AAAA

    Est-ce que cela vous parait possible avec une expression régulière ?

    à défaut, je ferai 10 cas avec une regex pour chaque longueur possible de texte saisi.

    Papy !

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Salut.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var exp = /^[\0-3](?:[\d](?:[\/](?:[\01](?:[\d](?:[\/](?:[\d](?:[\d](?:[\d](?:[\d])?)?)?)?)?)?)?)?)?$/;
    serait une première approche. Mais, ça impose un jour entre 01 et 39, un mois entre 01 et 19 et une année aléatoire sur 4 chiffres.

    Selon moi, une meilleure solution serait de faire un split sur le caractère "/" puis de tester les éventuelles valeurs en fonction des rangs, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function tester(date){
        var tabVals = date.split('/');
        if(+tabVals[0]>31){return false;}
        if(tabVals[1] && +tabVals[1]>12){return false;}
        if(tabVals[2] && +tabVals[2]>2020){return false;}
    }

  3. #3
    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 643
    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 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Désolé de venir faire le trouble fête, surtout quand il s'agit de regexp

    Pour moi il ne faut pas utiliser une regexp pour verifier une date !!
    La regexp peut vérifier le format, mais en aucun cas l'exactitude de la date !
    exemple: 31/01/2010
    quoi qu'à la limite ça pourrait se traiter avec une expression monstrueuse, mais en aucun cas tu ne pourras gérer les années bissextiles ou non.

    Par contre il doit y avoir dans la FAQ ou les contribution un vrai script js de vérification de date ...
    http://javascript.developpez.com/faq...erifFormatDate

    On pourra y modifier le séparateur - en / ...

  4. #4
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 494
    Points : 3 129
    Points
    3 129
    Par défaut
    Moi, ce que je cherche à faire, c'est vérifier la "validité" à chaque frappe de touche. Par exemple, si l'utilisateur a déjà tapé 2 chiffres, limiter la saisie au / .
    Un peu comme un maskedit qui guide la saisie.

    Sinon, oui, à la sortie de l'input, je peux tester facilement si la date est bonne ou pas.

    Dans le contexte, je ne cherche qu'à ""forcer"" l'utilisateur à saisir 1 ou 2 chiffres suivis d'un / suivi d'1 ou 2 chiffres suivis d'1 / suivi de 4 chiffres, et ce , à chaque frappe de touche. Je peux à la limite forcer un format complet JJ/MM/AAAA. La vérification de la validité de la date saisie se faisant après coup, dans le submit de mon formulaire. Si un utilisateur a saisi 59/75/0000, lors de la frappe, ça reste valide. Mais après, au submit, je check la date pour voir si elle correspond à quelque chose de correct.

    Je pensais à une expression régulière, pensant que ça m'éviterait dans le onkeypress de faire un truc du genre:
    si 1 seul caractère dans l'input, vérifier que c'est un chiffre
    si 2 caractères, vérifier que c'est un chiffre ou un /
    si 3 caractères, etc....
    Mais une regex n'est peut-être aps la meilleure façon de faire .

    Bovino: peut-être que ta fonction tester(date) le permet, parce que je ne comprends pas la syntaxe employée avec le + devant le tableau. pourrais-tu me donner des précisions stp ?

    SpaceFrog: Là aussi, tel que je le vois, ça ne permet que la validation en sortie de l'input, non ?

  5. #5
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    dac avec la grenouille: pas de regexp pour une date;

    l'idée pour ce genre de script est de viser la simplicité: le fait d'imposer des "/" dans la saisie ne l'est pas, par exemple!

    essaie ceci:

    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
    <p style="margin-top:50px">
    Saisissez une date de la forme <span>aaaa-mm-jj</span>
    </p>
     
     
    <form id="quand" action="">
    	<p>
    		<input name="a" type="text" size="1" maxlength="4" /> 
    		<input name="m" type="text" size="1" maxlength="2" /> 
    		<input name="j" type="text" size="1" maxlength="2" /> 
    		<input type="button" value="ok" onclick="verif(f['a'].value,f['m'].value,f['j'].value)" /> 
    	</p>
    </form>
     
    <script type="text/javascript">
     
    var f=document.forms["quand"].elements;
     
    function verif(a,m,j){ 
    	m-=1;
    	d=new Date(a,m,j);
    	var rep= (d.getFullYear()!=a || d.getMonth()!=m) ? "date invalide" : "date valide";
    	alert(rep); 
     
    } 
     
    </script>

  6. #6
    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 643
    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 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    sinon le plus simple, et j'ai déjà du poste un script de ce genre est d'accoler 3 inputs ...
    il sera plus facile ensuite de tester sur le onblur ou basculer les valeurs dans un input hidden

    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
    <style type="text/css">
    .deux {
    	width:20px;
    	}
    .four {
    	width: 40px;
    	}
     
    .date { border:solid 0;}
    #contour {
    	border: inset 2px	 snow;
    	display:inline;
    	width:auto;
    	}
    </style>
    </head>
    <body>
    <fieldset id="contour">
    <input type='text' id="jour" value="" maxLength="2" class="date deux" />/<input type='text' id="mois" value="" maxLength="2" class="date deux" />/<input type='text' id="an" value="" maxLength="4" class="date four" />
    </fieldset>
    </body>
    </html>

  7. #7
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 494
    Points : 3 129
    Points
    3 129
    Par défaut
    l'idée des 3 input est pas mal en y ajoutant un passage automatique entre les input dès que la longueur max est atteinte. Je vais étudier toutes ces pistes.

    Merci à tous !

    Finalement, j'ai pris cette solution. Merci !

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

Discussions similaires

  1. [XL-2002] Supprimer "hh:mm:ss" dans date complète
    Par fancho dans le forum Excel
    Réponses: 3
    Dernier message: 20/06/2009, 03h15
  2. Créer date complète avec date + heure et comparer
    Par stof dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 22/10/2008, 16h12
  3. problème max(date) et champs non correspondant
    Par sorenson dans le forum Requêtes
    Réponses: 3
    Dernier message: 07/04/2007, 14h01
  4. [Oracle] Retour de date complète (format DATETIME)
    Par AntaresJon dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/04/2006, 17h57

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