| quelqu'un s'y connait en regex ? |
|
| Posté le : 12/09/2009 à 21:48 (Lu 6285 fois) | | | 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] |
|
| Posté le : 12/09/2009 à 21:58 (Lu 6279 fois) | | | $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] |
|
| Posté le : 12/09/2009 à 22:16 (Lu 6278 fois) | | | Ah super, j'essais ça tout de suite, merci packman !
| --------------------------------
 |
|
|
| Re: quelqu'un s'y connait en regex ? [157550] |
|
| Posté le : 12/09/2009 à 22:36 (Lu 6276 fois) | | | ç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] |
|
| Posté le : 12/09/2009 à 22:48 (Lu 6270 fois) | | | 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] |
|
| Posté le : 12/09/2009 à 23:01 (Lu 6268 fois) | | | 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] |
|
| Posté le : 13/09/2009 à 00:05 (Lu 6263 fois) | | | J'ai trouvé ma boulette : $^! (fin de la regex)
Le ^ est en trop.
| --------------------------------
 |
|
|
| Re: quelqu'un s'y connait en regex ? [157555] |
|
| Posté le : 13/09/2009 à 09:30 (Lu 6252 fois) | | | 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] |
|
| Posté le : 13/09/2009 à 20:14 (Lu 6229 fois) | | | 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
| --------------------------------
 |
|
|
|