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

Développement Web avec .NET Discussion :

Expression régulière contrôle de date


Sujet :

Développement Web avec .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Expression régulière contrôle de date
    Salut tout le monde.

    Je suis toujours aussi nul en expression régulière et j'en utilise pas assez souvent pour m'améliorer.

    Alors je viens solliciter votre gentillesse pour m'aider à pondre celle là.
    quoi que, peut-être que c'est pas possible en fait, vous me direz.

    Je pars de ça :
    ([0-9]{2,2})(/)([0-9]{2,2})(/)([0-9]{4,4})
    J'ai mis un <asp:RegularExpressionValidator et veux contrôler un champ text qui doit contenir une date au format JJ/MM/AAAA et en plsu, qui doit prendre en compte le calcul de l'âge car je veux que la saisi donne un âge compris entre 18 et 99 ans.

    Premier problème : j'arrive pas à contrôler le format de la date, visiblement y a un problème avec les 4 chiffres de l'année.
    Deuxième problème : je n'ai aucun idée de comment on peut dire à une expression régulière de prendre la date courante pour calculer l'âge.

    Vous pouvez maider ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Les expressions régulières ne sont pas la solution magique à tous les problèmes
    Ce que tu veux faire pour vérifier l'age est tout bonnement impossible avec une regex.

    Même vérifier qu'une date est valide, c'est pas vraiment possible, ou du moins super galère : par exemple, il faut gérer le fait que le mois doit être entre 1 et 12, que le nombre de jour est entre 1 et 30 ou entre 1 et 31 selon le mois, voire entre 1 et 28 pour février (29 pour une année bissextile...). Bref, beaucoup trop compliqué pour une regex.

    A mon avis, le plus simple c'est que tu utilises un CustomValidator pour gérer toi-manuellement la validation dans le code-behind. Tout ce que tu as à faire, c'est tester si la date est valide (avec DateTime.TryParse) et si l'âge dans la plage voulue.

    (au fait, ton site est interdit aux centenaires ? )

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Ok, je vais tester tout ça.

    Merci pour ton aide.

  4. #4
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Citation Envoyé par tomlev Voir le message
    (au fait, ton site est interdit aux centenaires ? )
    Ben en fait, je sais pas trop, j'y ai réfléchi toute la nuit et je me dis qu'arrivé à un certain âge, ça clique plus droit...... hi hi hi

    Bon, sinon, j'ai un petit souci sur l'établissement du contrôle. Y a un détail que j'ai pas bien capté dans le TryParse, je crois.
    Autre point : c'est bien un contrôle serveur, donc il va poster ma page pour faire ce contrôle ? ça va pas me poser des soucis sur l'enregistrement des autres données ?
    Bon, voilà le code, déjà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Protected Sub cvDateNaissance_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles cvDateNaissance.ServerValidate
            Dim testdate As Date
            If DateTime.TryParse(args.Value, testdate) Then
                If Year(Now) - Year(testdate) < 18 And Year(Now) - Year(testdate) > 120 Then
                    args.IsValid = False
                Else
                    args.IsValid = True
                End If
            Else
                args.IsValid = False
            End If
     
        End Sub
    Le TestDate, je l'ai fait un peu au hasard, je dois dire, mais est qu'il récupère bien la date ?

    Ensuite je vois pas comment je peux le forcer à faire une date avec l'année sur 4 chiffres, j'ai pas trouvé.

    Et question subsidaire : je me serais pas (une fois de plus) gourré sur mon test avec l'âge. J'ai le don pour ma gourré sur les < et les >, mais depuis tout petit déjà ! Faut dire aussi que j'ai pas beaucoup joué à PacMan.

    Merci pour ton aide.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Autre point : c'est bien un contrôle serveur, donc il va poster ma page pour faire ce contrôle ? ça va pas me poser des soucis sur l'enregistrement des autres données ?
    Ca va faire un postback, oui. Après je suis pas trop expert en ASP.NET, mais je crois que tu dois tester Page.IsValid avant de faire l'enregistrement

    Citation Envoyé par zooffy Voir le message
    Le TestDate, je l'ai fait un peu au hasard, je dois dire, mais est qu'il récupère bien la date ?
    Oui, il renvoie true et affecte la date à testdate si args.Value représente une date valide. Par contre testdate doit être de type DateTime et non Date (Date est un type spécifique à VB, le type standard pour les dates en .NET est DateTime)

    Citation Envoyé par zooffy Voir le message
    Ensuite je vois pas comment je peux le forcer à faire une date avec l'année sur 4 chiffres, j'ai pas trouvé.
    Ben le format de date par défaut en français a l'année sur 4 chiffres... Donc ça fonctionnera pas si l'utilisateur n'en saisit que 2.

    Si tu veux forcer l'utilisation d'un format spécifique, tu peux utiliser DateTime.ParseExact

    Citation Envoyé par zooffy Voir le message
    Et question subsidaire : je me serais pas (une fois de plus) gourré sur mon test avec l'âge
    2 trucs qui vont pas :
    - Il faut faire un Or et non un And : le gars ne peut pas avoir à la fois moins de 18 ans et plus de 99
    - en testant uniquement sur l'année tu peux faire des erreurs... Exemple : quelqu'un qui est né en décembre 1992 n'a pas encore 18 ans, mais 2010 - 1992 = 18, donc il passe...

    Il faut faire la différence sur les dates, et tester le nombre d'années :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim age As TimeSpan = DateTime.Now - testdate
    If age.TotalYears < 18 Or age.TotalYears > 99 Then
        args.IsValid = False
    Else
        args.IsValid = True
    End If

  6. #6
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Super génial, ça fait plaisir de lire quelqu'un qui donne des détails comme toi.

    Merci, merci beaucoup. Avec mes soucis d'hébergeur, j'avais besoin de lire du constructif.

    Alors ok pour le OR au lieu du AND, mais j'ai pas la tête au dévelopement ce matin.

    L'histoire du parse, je savait pas. J'avoue que la gestion des dates à toujours été un léger souci pour moi. J'ai du mal avec ce qui n'est pas purmement décimal.

    Faut que j'aille voir le détail de TryParseExact, il me demande le format et je sais pas quoi lui mettre mais la MSDN devrait me le dire.

    Par contre souci sur TotalYears il me dit que ce n'est pas un membre de TimeSpan.

    Sur le test uniquement sur l'année, ce n'est pas trés grave. Certes ce n'est pas précis, mais la cible de ce site est une CSP moyenne,donc des gens plutôt entre 25 et 50 ans. L'idée c'est de viré les mineurs (il y a une histoire d'argent dans le site) et les plaisantins qui ont tous 109 ans !!!!

    Mais bon, un peu de précision en fera pas de mal.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Par contre souci sur TotalYears il me dit que ce n'est pas un membre de TimeSpan.
    Arf, c'est vrai... dans ce cas tu peux faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim years As Integer = age.TotalDays / 365.25
    (le .25 permet de tenir compte des années bissextiles...)

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

Discussions similaires

  1. Expression régulière sur une date
    Par mattyeux dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/09/2007, 17h08
  2. [RegEx] Expression régulière sur une date
    Par mattyeux dans le forum Langage
    Réponses: 1
    Dernier message: 21/09/2007, 11h16
  3. [RegEx] Contrôle avec expression régulière
    Par lodan dans le forum Langage
    Réponses: 8
    Dernier message: 23/10/2006, 19h32
  4. [RegEx] expression régulière - date
    Par dark_demon dans le forum Langage
    Réponses: 15
    Dernier message: 23/06/2006, 12h14
  5. [RegEx] expression régulière et date
    Par r-zo dans le forum Langage
    Réponses: 4
    Dernier message: 15/11/2005, 13h27

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