fonctionnement d'Ereg

Eléphanteau du PHP | 28 Messages

06 juin 2007, 17:58

bonjour,

je fais un test sur une chaine de caractère pour verifier si elle contient la chaine "bot"
mais dans l'exemple ci dessous mon test ne la detecte pas :

Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (http://www.voila.com/)

Code : Tout sélectionner

if(!ereg('bot',$chaine) ) { // traitement }
le traitement se fait :roll:

merci de m'aider.

Mammouth du PHP | 19672 Messages

06 juin 2007, 19:06

ereg() attend en premier paramètre une expression régulière, pas une chaine. Donc il faudrait plutôt faire :
if(!ereg('^.*(bot).*$', $chaine) )
{
    // traitement
} 
Un petit tour dans la doc ne serait pas superflu
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

06 juin 2007, 20:27

Au passage, qui t'a conseillé d'utiliser ereg() ? Cela fait longtemps que ereg() est tombé en désuétude, il ne fonctionnera probablement pas sous PHP 6 et il serait peut-être bon de faire modifier la page qui préconise son usage.

Et puis tant qu'on y est, j'ai remarqué que ta chaîne de test ne contenait pas la chaîne "bot" (elle contient "Bot") donc c'est normal que ton test ne donne pas les résultats escomptés. La meilleure solution est d'utiliser strpos() ou stripos() selon le résultat que l'on veut obtenir.

ViPHP
AB
ViPHP | 5818 Messages

06 juin 2007, 21:54

Bonsoir,

Si tu veux faire une recherche insensible à la casse (qui ne tient pas compte des majuscules ou minusciles) et utiliser ereg, il faut écrire pour effectuer la commande uniquement si bot n'est pas trouvé dans la chaine :
if(!ereg('bot', strtolower($chaine))
{
//commande
}
mais il faut éviter d'utiliser ereg pour des recherches aussi simples, et préférer preg_match() pour des recherches plus complexes.
Dans ton cas, si tu souhaites que ton code soit compatible php4
if(strpos(strtolower($chaine),'bot') === FALSE) 
{
//commande
}
à partir de php5 tu peux faire
if(stripos($chaine,'bot') === FALSE) 
{
//commande
}
Cela dit si ereg disparait en php6, j'aurai du boulot à faire d'ici quelques années car je l'utilisais souvent à mes début pour des recherches un peu compliquées alors que j'aurais plutôt dû utiliser preg_match() que je ne connaissais pas (y'a pas que des exemples optimisés sur le web!).
Suis les conseils d'Hubert et évites d'utiliser ereg, ça te fera gagner du temps ainsi qu'au serveur :wink:

Eléphanteau du PHP | 28 Messages

12 juin 2007, 16:34

merci à tous pour votre aide.
en fait je reprend un code existant, et c'est la fonction Ereg qui était utilisée...

je vais modifier tout ça.


merci encore !