pb avec ereg

rom1
Invité n'ayant pas de compte PHPfrance

22 mars 2006, 15:07

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

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

22 mars 2006, 15:17

Pensez à
pour encadrer du code...

Eléphant du PHP | 413 Messages

22 mars 2006, 15:18

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 ?
--
Goeb

Eléphant du PHP | 451 Messages

22 mars 2006, 15:20

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 ?
Modifié en dernier par jpaul le 22 mars 2006, 15:28, modifié 4 fois.
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

rom1
Invité n'ayant pas de compte PHPfrance

22 mars 2006, 15:21

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

rom1
Invité n'ayant pas de compte PHPfrance

22 mars 2006, 15:26

j'ai teste la solution de jPaul mais ca ne change pas.
Avez vous une autre idée.

Merci.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

22 mars 2006, 15:32

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 mars 2006, 15:37

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)

rom1
Invité n'ayant pas de compte PHPfrance

22 mars 2006, 15:44

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....

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 mars 2006, 16:03

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]

rom1
Invité n'ayant pas de compte PHPfrance

22 mars 2006, 16:14

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

Eléphant du PHP | 451 Messages

22 mars 2006, 16:18

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 ;)
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 mars 2006, 16:31

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 ) )

rom1
Invité n'ayant pas de compte PHPfrance

22 mars 2006, 18:10

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.

Eléphant du PHP | 451 Messages

22 mars 2006, 18:28

... 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)
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)