Page 1 sur 2

pb avec ereg

Posté : 22 mars 2006, 15:07
par rom1
bonjour,

j'ai un pb avec ceci
$h_depart = $_POST['h_depart'];
$h_arrive = $_POST['h_arrive'];
echo $h_depart;
echo $h_arrive;
$eH=0;
if(ereg("([00-23]{2}):([00-59]{2}):([00-59]{2})", $h_depart))
{
    $eH=0;
}
else
{
    $eH=2;
}
echo $eH;
if(ereg("([00-23]{2}):([00-59]{2}):([00-59]{2})",$h_arrive))
{
    $eH=0;
}
else
{
    $eH=2;
}
echo $eH;
j'obtiens ceci :

12:00:00 08:00:00 0 2

j'ai testé et j'obtiens 0 et 0 ssi j'ai ceci 12:00:00 et 12:00:00

Pouvez vous m'aider svp.
Merci

Posté : 22 mars 2006, 15:17
par ouckileou
Pensez à
pour encadrer du code...

Posté : 22 mars 2006, 15:18
par goeb
Salut,

je crois que l'expression régulière [00-23] signifie :
"le caractère 0 ou un caractère entre 0 et 2 ou le caractère 3".
ce n'est probablement pas ce que tu veux.

tu voudrais quoi exactement ?

Posté : 22 mars 2006, 15:20
par jpaul
Je te propose d'essayer avec :
if(ereg("([0-1][0-9]):([0-5][0-9]):([0-5][0-9])",$h_arrive))
Faut rajouter quelque chose pour le 2 : je cherche...

Sauf erreur de ma part, quand on met [x-y] veut dire les caractères de x à y.
on ne peut pas dire les caractères de fg à lm : ça n'a aucun sens non ?

Pareil pour départ bien sûr...
Hum les sad valent : et ( bien sûr...
Les smileys sont interprétés même entre les bornes php ?

Posté : 22 mars 2006, 15:21
par rom1
Salut,


je voudrais verifier que les variable $h_depart et $h_arrive sont bien de la forme hh:mm:ss
avec hh compris entre 0et 23, mm entre 00 et 59 et ss entre 00 et 59

Posté : 22 mars 2006, 15:26
par rom1
j'ai teste la solution de jPaul mais ca ne change pas.
Avez vous une autre idée.

Merci.

Posté : 22 mars 2006, 15:32
par ouckileou
Il manque un quantificateur à chaque fois, que tu dises combien de fois tu veux le chiffre entre 0 et 5

Regarde ici,
ça t'aidera peut-être : http://www.phpfrance.com/forums/voir_sujet-12979.php

Posté : 22 mars 2006, 15:37
par Ryle
Quelque chose dans ce goût là ?

Code : Tout sélectionner

([01][0-9])|(2[0-3]):[0-5][0-9]:[0-5][0-9]
(de 00 à 23 pour les heures et 00 à 59 pour minutes et secondes)

Posté : 22 mars 2006, 15:44
par rom1
Ok merci, j'ai teste la derniere solution. Par contre si $h_depart=12 cela affiche aussi 0.
Je vais devoir faire un teste supplementaire pour verifier que le format est bien hh:mm:ss.
Si je pouvais le faire en meme temps, ce serait plus pratique....

Posté : 22 mars 2006, 16:03
par Ryle
Oops.. ca ne devrait pas te prendre le 12 tout seul. C'est un p'tit soucis de parenthèse, essaye comme ceci :

Code : Tout sélectionner

(([01][0-9])|(2[0-3])):[0-5][0-9]:[0-5][0-9]

Posté : 22 mars 2006, 16:14
par rom1
Salut,


Alors j'ai dis n'importe quoi tt a l 'h

Code : Tout sélectionner

$h_depart = $_POST['h_depart']; $h_arrive = $_POST['h_arrive']; echo $h_depart; echo $h_arrive; $eH=0; // var_dump( $h_depart); if(ereg("(([01][0-9])|(2[0-3])):[0-5][0-9]:[0-5][0-9] )",$h_depart)) { $eH=0; } else { $eH=2; } echo $eH; //([01][0-9])|(2[0-3]):[0-5][0-9]:[0-5][0-9] if(ereg("(([01][0-9])|(2[0-3])):[0-5][0-9]:[0-5][0-9]) ",$h_arrive)) { $eH=0; } else { $eH=2; } echo $eH;

avec ces tests 92:00:00 et 12:00:00 j'obteins tjs 2 et 2

Posté : 22 mars 2006, 16:18
par jpaul
Oops.. ca ne devrait pas te prendre le 12 tout seul. C'est un p'tit soucis de parenthèse, essaye comme ceci :

Code : Tout sélectionner

(([01][0-9])|(2[0-3])):[0-5][0-9]:[0-5][0-9]
J'ai toujours été nul en expressions régulières :oops: je te laisse entre les mains de Ryle, s'il n'a pas la solution il en est tout proche ;)

Posté : 22 mars 2006, 16:31
par Ryle
Arf, chuis pas un expert non plus, mais à force on commence à connaitre deux - trois trucs ;)

Rom1 >> non mais qu'est ce que c'est que tout ces espaces au bout de ton expression régulière ?! ;) On recherche une chaine de caractère précise et môssieur trouve judicieux de coller des espaces pour tout me fiche en l'air ?! :p
if ( ereg( "(([01][0-9])|(2[0-3])):[0-5][0-9]:[0-5][0-9]" , $_arrive ) )
Au mieux tu peux ajouter un ^ au début et un $ à la fin, pour etre sur qu'il n'y a pas d'autres caractères :) :
if ( ereg( "^(([01][0-9])|(2[0-3])):[0-5][0-9]:[0-5][0-9]$" , $_arrive ) )

Posté : 22 mars 2006, 18:10
par rom1
Salut,

ca ne marche tjs pas.
Ce que je vais faire, c'est que je vais regarder ça ce soir ou demain a tete reposé et je vous dirai.
Merci encore pour votre aide.

Posté : 22 mars 2006, 18:28
par jpaul
... a tete reposé et je vous dirai.
Merci encore pour votre aide.
Vi je crois qu'il faut que tu reposes ta tête ;)
J'ai fait un test avec le code de Ryle, ça à l'air nickel !!!
J'ai pas fait toutes les possibilités mais à première vue c'est bon...

Bonne chance, tu es presque au bout :)
Et bravo Ryle 8)