Page 1 sur 1

fonctionnement d'Ereg

Posté : 06 juin 2007, 17:58
par ZeDeveloppeur
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.

Posté : 06 juin 2007, 19:06
par Cyrano
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

Posté : 06 juin 2007, 20:27
par Hubert Roksor
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.

Posté : 06 juin 2007, 21:54
par AB
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:

Posté : 12 juin 2007, 16:34
par ZeDeveloppeur
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 !