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à ?
(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 :
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 :
J'ai toujours été nul en expressions régulières

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)