Forum d'aide aux internautes

Retour au forumNouveau sujetInscriptionIdentificationRecharger la première page du forumFaire une rechercheListe des membresInformations & statistiques

Pages:  1

quelqu'un s'y connait en regex ?

seals
Noobi

Voir son profil

seals

Activité : 3.5 / 5
Grand Gourou
3815 messages postés


Posté le : 12/09/2009 à 21:48 (Lu 6285 fois)
Répondre
Citer

Salut

j'ai une chaine qui ressemble à ceci (en bcp plus long ^^):
'0-2009-09-12 21:30:00*
1-2009-09-12 21:35:00*
2-2009-09-12 21:22:00*
3-2009-09-12 21:30:00*'

A partir de ça je fait un traitement pour obtenir ce tableau :
0 => 2009-09-12 21:30:00
1 => 2009-09-12 21:35:00
2 => 2009-09-12 21:22:00
3 => 2009-09-12 21:30:00

Ensuite je voudrait savoir si les valeurs ont un format correct (0000-00-00 00:00:00 à 9999-99-99 99:99:99).
$dateIsValid = true;
foreach ($tab as $line) {
$dateIsValid = .................... false si le format est incorrecte;
}

Je suppose qu'une regex est obligatoire, mais je ne maitrise pas cette bête là !
Quelqu'un peu me filer un coup de main svp ?

Merci d'avance.


----------
Edité le 12/09/2009 à 21:50 par seals

--------------------------------

Re: quelqu'un s'y connait en regex ? [157547]

Packman
Modo maniaque francophone

Voir son profil  Son site web : http://azteka.exaweb.fr  Skype : aztekcoatl

Packman

Activité : 3.5 / 5
Grand Gourou
5780 messages postés


Posté le : 12/09/2009 à 21:58 (Lu 6279 fois)
Répondre
Citer

$dateIsValid = $dateIsValid && preg_match("!^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$^!", $line);

De cette manière, si une des dates du tableau est invalide, ta variable finale est invalide

--------------------------------

Re: quelqu'un s'y connait en regex ? [157548]

seals
Noobi

Voir son profil

seals

Activité : 3.5 / 5
Grand Gourou
3815 messages postés


Posté le : 12/09/2009 à 22:16 (Lu 6278 fois)
Répondre
Citer

Ah super, j'essais ça tout de suite, merci packman !

--------------------------------

Re: quelqu'un s'y connait en regex ? [157550]

seals
Noobi

Voir son profil

seals

Activité : 3.5 / 5
Grand Gourou
3815 messages postés


Posté le : 12/09/2009 à 22:36 (Lu 6276 fois)
Répondre
Citer

ça ne fonctionne pas ^^
ça viens peut-être des espaces entre la date et l'heure, c'est pris en compte dans la regex ?


$chaine = '00-2009-09-12 21:30:00*01-2009-09-12 21:35:00*02-2009-09-12 21:22:00*03-2009-09-12 21:30:00';
$explode = explode('*', $chaine);
$tab = array();
$dateIsValid = true;
foreach($explode as $line) {
$tab[substr($line, 0, 2)] = substr($line, 3);
$dateIsValid = $dateIsValid && preg_match("!^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$^!", substr($line, 3));
}


$dateIsValid à false pour valeur à la fin du foreach.
et $tab :
Array
(
[00] => 2009-09-12 21:30:00
[01] => 2009-09-12 21:35:00
[02] => 2009-09-12 21:22:00
[03] => 2009-09-12 21:30:00
)

----------
Edité le 12/09/2009 à 22:44 par seals

--------------------------------

Re: quelqu'un s'y connait en regex ? [157551]

Khantic
Webmaster

Voir son profil  Son site web : http://www.forum-aztek.com  Messagerie ICQ : 323340272  Skype : Khantic

Khantic

Activité : 4 / 5
Grand Gourou
11833 messages postés


Posté le : 12/09/2009 à 22:48 (Lu 6270 fois)
Répondre
Citer

function checkMysqlDateFormat($date)
{
// Match the format of the date
if (preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})$/", $date, $parts))
{
//check weather the date is valid of not
if(checkdate($parts[2],$parts[3],$parts[1]))
return true;
else
return false;
}
elseif(preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $date, $parts))
{
//check weather the date is valid of not
if(checkdate($parts[2],$parts[3],$parts[1]))
return true;
else
return false;
}
else
return false;
}


Un code que j'utilise.

Re: quelqu'un s'y connait en regex ? [157552]

seals
Noobi

Voir son profil

seals

Activité : 3.5 / 5
Grand Gourou
3815 messages postés


Posté le : 12/09/2009 à 23:01 (Lu 6268 fois)
Répondre
Citer

J'ai remplacé ta regex packman par celle de khantic :
preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})$/"

ça fonctionne parfaitement !

Merci vous deux.


edit : faudrait vraiment que je m'y mette aux regex

----------
Edité le 12/09/2009 à 23:02 par seals

--------------------------------

Re: quelqu'un s'y connait en regex ? [157553]

Packman
Modo maniaque francophone

Voir son profil  Son site web : http://azteka.exaweb.fr  Skype : aztekcoatl

Packman

Activité : 3.5 / 5
Grand Gourou
5780 messages postés


Posté le : 13/09/2009 à 00:05 (Lu 6263 fois)
Répondre
Citer

J'ai trouvé ma boulette : $^! (fin de la regex)
Le ^ est en trop.

--------------------------------

Re: quelqu'un s'y connait en regex ? [157555]

Woodgate
Administrateur

Voir son profil  Son site web : http://www.cafeine.pro  MSN Messenger : julien@cafeine.pro

Woodgate

Activité : 4.5 / 5
Grand Gourou
23009 messages postés


Posté le : 13/09/2009 à 09:30 (Lu 6252 fois)
Répondre
Citer

Il y a aussi checkdate() pour vérifier la validité d'un date en lui passant le jour, le mois, et l'année... (au as où).

--------------------------------

Re: quelqu'un s'y connait en regex ? [157558]

seals
Noobi

Voir son profil

seals

Activité : 3.5 / 5
Grand Gourou
3815 messages postés


Posté le : 13/09/2009 à 20:14 (Lu 6229 fois)
Répondre
Citer

Merci wood, cette fonction vas m'être utile pour autre chose.


Je suis en train de faire un système de lu / non lut sans BDD pour le fun, qu'en pensez-vous ? Il y a plus simple ?
<?php
/*==============================================================================
LU / NON LU
==============================================================================*/
function dateExtraction($chaine) {
// la date doit être au format DATETIME
// et séparé de cette façon 00-2009-09-12 21:30:00*01-2009-09-12 21:35:00*
$explode = explode('*', $chaine);
$tab = array();
$dateIsValid = true;
foreach($explode as $line) {
$tab[substr($line, 0, 2)] = substr($line, 3);
$dateIsValid = $dateIsValid && preg_match("/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})$/", substr($line, 3));
}
return ($dateIsValid)?$tab:false;

}
function isLu($heureCookie, $heureMess) {
return $heureCookie < $heureMess;
}

// en debut de page
$tab2 = dateExtraction('le cookie');

// boucle qui liste les sujets....
?>
<img src=<?php echo (isLu($tab2[$donnee['sujet_id'], $donnee['sujet_dateDernierMess']))?'"./imgs/nonlu.png" title="Message non lu"':'"./imgs/lu.png" title="Message lu"'; ?> />
<?php
// quand on affiche un sujet on modifit l'association de $tab2 où l'index correspond à l'id du sujet et on remet le tout dans le cookie





----------
Edité le 13/09/2009 à 20:16 par seals

--------------------------------

Pages:  1

Retour au forumNouveau sujetInscriptionIdentificationRecharger la première page du forumFaire une rechercheListe des membresInformations & statistiques

Ajouter une réponse

Vous écrivez en tant que :  Login :   Password :
Titre de votre message :
Corps de votre message :

 [citation] [image] [flash]

 [gras] [italique] [souligné]
 [barré] [exposant] [indice]
 [grandir] [reduire] [code]

 [noir] [blanc] [jaune] [orange]
 [rouge] [violet] [bleu] [vert]

   Prévisualiser le message

12345678910
AA1A2A3A4A5A6A7A8A9A10
BB1B2B3B4B5B6B7B8B9B10
CC1C2C3C4C5C6C7C8C9C10
DD1D2D3D4D5D6D7D8D9D10
EE1E2E3E4E5E6E7E8E9E10
FF1F2F3F4F5F6F7F8F9F10

   M'avertir par email en cas de nouvelle réponse (pour les membres)

Valider

Obtenez votre forum Aztek sur www.forum-aztek.com - Pour vos vacances, visitez www.vacances-location.net. - Administration - MyStats
Aztek Forum V4.01 Copyright (C) 2003 - Liens - Page générée en 0.0314 seconde avec 11 requêtes