pb avec ereg

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : pb avec ereg

par jpaul » 22 mars 2006, 23:22

Salut,

Je sais pas, j'ai testé avec ceci $h_depart=12, $depart=12:00:00 et $h_depart=99:99:00 et j'ai obtenu les memes resultats.
Ben écoute voilà le code avec lequel j'essaye l'expression de Ryle :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "xhtml11.dtd">

<html>
    <head>
        <title>Essais</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>

    <body>
<?php
reset($_POST);
while (list($key, $val) = each($_POST )) {
	echo "<BR>$key -> $val";
	$$key=$val;
}
	echo "<FORM action=";
	echo $_SERVER["PHP_SELF"];
	echo " method="post">";
	echo "<BR>h_depart : <INPUT TYPE=TEXT NAME=h_depart>";
	echo "<BR>h_arrive : <INPUT TYPE=TEXT NAME=h_arrive>";
	echo "<BR><INPUT TYPE=SUBMIT>";
	echo "</FORM>";
if (($h_depart) && ($h_arrive)){
echo "<BR>h_depart=".$h_depart;
echo "<BR>h_arrive=".$h_arrive;
$eH=0;
//if(ereg("([00-23]{2})Sad[00-59]{2})Sad[00-59]{2})", $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 "<BR>".$eH;
//if(ereg("([00-23]{2})Sad[00-59]{2})Sad[00-59]{2})",$h_arrive))
if ( ereg( "^(([01][0-9])|(2[0-3])):[0-5][0-9]:[0-5][0-9]$" , $h_arrive ) )
{
    $eH=0;
}
else
{
    $eH=2;
}
echo "<BR>".$eH;
}
?>
    </body>
</html> 
Je me suis permis de rajouter des <BR> pour m'y retrouver.
Voici un copier coller du résultat :
h_depart -> 12:00:00
h_arrive -> 99:99:00

h_depart :
h_arrive :

h_depart=12:00:00
h_arrive=99:99:00
0
2

12/00:00 donne 0 et 99:99:99 donne 2 ça m'a l'air bon...
23:59:59 -> 0 et 24:00:00 -> 2
Ca m'a l'air nickel, je vais me la garder sous le coude d'ailleurs ;)
Bon courage :)

par rom1 » 22 mars 2006, 20:06

Salut,

Je sais pas, j'ai testé avec ceci $h_depart=12, $depart=12:00:00 et $h_depart=99:99:00 et j'ai obtenu les memes resultats.

par jpaul » 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)

par rom1 » 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.

par Ryle » 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 ) )

par jpaul » 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 ;)

par rom1 » 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

par Ryle » 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]

par rom1 » 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....

par Ryle » 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)

par ouckileou » 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

par rom1 » 22 mars 2006, 15:26

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

Merci.

par rom1 » 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

par jpaul » 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 ?

par goeb » 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 ?