View Single Post
  #2  
Old 11-11-2005, 22:43
Cougar's Avatar
Cougar Cougar is offline
Membre senior
 
Join Date: 16-09-2001
Location: Orléans
Age: 39
Posts: 3,850
Send a message via MSN to Cougar
je suppose que c'est du php ?
Après une ptite recherche :

Code:
Utilisation de la fonction strpos()

La fonction strpos() permet de connaitre la position de la première occurence d'une chaine contenu dans une autre chaine. Toutefois comme le premier caractère d'une chaine à pour numéro d'ordre 0 et non 1, se pose le problème de la différenciation entre une chaine contenant la chaine recherchée en début (donc la fonction retourne 0) et une chaine ne contenant pas la chaine recherchée. La syntaxe suivante est donc incorrecte.

    $POS=strpos($ChercheDans,$LaChaine,$Apartir_du_Caract._n°);
    if ($POS==0):
           .....
        Endif;

La fonction ne peut renvoyer 0 (valeur généralement utilisée en retour pour signaler un echec) puisque cette valeur 0 correspond justement à la position réelle du 1er caractère. Aussi PHP retourne une chaine de caractère contenant 'false' si la recherche échoue, et une valeur numérique si elle a aboutie (la chaine recherchée est trouvée dans la chaine principale). Pour obtenir un test correct il faut donc tester le type de la valeur retournée avant de poursuivre les traitements :

    $POS=strpos($ChercheDans,$LaChaine,$Apartir_du_Caract._n°);
    if (!is_string($POS)):
           // Cette syntaxe est correcte. On n'entre dans
	// la boucle  que si la valeur retournée
           // est une valeur numérique.
           .....
        Endif;

Une autre astuce, s'il s'agit simplement de vérifier l'existence d'une sous-chaine dans une chaine, donc qu'aucun traitement sur la chaine principale n'est conditionnée par la position de la sous-chaine (comme couper la chaine à partir de la sous-chaine), et que par ailleurs on ne souhaite pas utiliser les fonctions EREG_xxx basées sur les expressions régulières :

    IF (strpos(" ".$ChercheDans,$LaChaine,$Apartir_du_Caract._n°) >0) :
           // Notez l'espace ajouté au début de
	// la chaine. Ainsi sauf si la sous-chaine commence
           // également par un espace, la condition n'est
	// vérifiée effectivement que si la
           // la sous-chaine est trouvée et ce sans avoir
	// tester le type de la valeur renvoyée.
       ...
__________________
Reply With Quote