Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/04/2007, 17h35   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2005
Messages : 95
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 95
Points : 14
Points : 14
Par défaut Recherche une regex valide

Bonjour je souhaiterai savoir quelle est la regex a utiliser pour verifier le format d'une date comme celle la :

jour-mois-an heure:minute:second

JJ:MM:AA HH:MM:SS

31-12-06 23:52:05

Voila merci beacoup !
dondano est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 18h33   #2
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Salut,

Avec une simple fonction utilisant checkdate()

Code PHP :
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
function verif_date($date)
{
    if( substr_count($date, ' ') == 1 )
    {
        $date = explode(' ', $date);
        if( substr_count($date[0], '-') == 2 && substr_count($date[1], ':') == 2 )
        {
            list($h, $m, $s) = explode(':', $date[1]);
            $date = explode('-', $date[0]);      
            if( checkdate($date[1], $date[0], $date[2]) === true )
              if( is_numeric($h) && is_numeric($m) && is_numeric($s) && $h >= 0 && $h <= 23 && $m >= 0 && $m <= 59 && $s >=0 && $s <= 59 )
                return true;
        }
    }
    return false;    
}
 
var_dump(verif_date('31-12-06 23:52:05'));
var_dump(verif_date('31-12-06 00:52:05'));
var_dump(verif_date('31-12-06 24:52:05'));
var_dump(verif_date('31-12-06 23:aa:05'));
var_dump(verif_date('32-12-06 23:52:05'));
var_dump(verif_date('31-02-06 23:52:05'));
var_dump(verif_date('31-12-06 23:52:70'));
var_dump(verif_date('31-*******06 23:52:05'));
var_dump(verif_date('31-12-06 2352:05'));
var_dump(verif_date('xxxxxxxxxx'));
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 19h30   #3
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
J'ai horreur de explode parce que si vous fournissez une chaîne invalide où il viendra à manquer des parties, plusieurs messages d'erreur vous seront affichés (sinon il faut ajouter des vérifications supplémentaires). Personnellement, je préfère donc le faire avec preg_match d'autant plus que l'on peut assouplir un peu le format :
Code :
1
2
3
4
5
6
7
8
9
function verif_date($date) {
    if (preg_match('#^([0-9]{2})([/-])([0-9]{2})\2([0-9]{2}|[0-9]{4})\s+([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})$#D', $date, $m)) {
        if (strlen($m[4]) == 2) {
            $m[4] += 2000;
        }
        return checkdate($m[3], $m[1], $m[4]) && $m[5] < 24 && $m[6] < 60 && $m[7] < 60;
    }
    return FALSE;
}
Probablement à améliorer ...
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 19h57   #4
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Le substr_count de la fonction que j'ai mise le vérifiait.

Mais bon, c'est vrai qu'une expression régulière est sans doute mieux.
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h31.


 
 
 
 
Partenaires

Hébergement Web