Fonction ereg_replace is deprecated

Résolu
Bonjour,

J'ai un problème de fonction, j'ai bien lu pourquoi etc...

Mais j'ai du mal avec la syntaxe du preg_replace

voici mon code:

       
$decoupe[$i] = preg_replace("([A-Za-z0-9])([^ A-Za-z0-9])", "\\1 \\2", $decoupe[$i]);       
$decoupe[$i] = preg_replace("([^ A-Za-z0-9])([A-Za-z0-9])", "\\1 \\2", $decoupe[$i]);    


Merci de votre aide !

3 réponses

  1. Salut salut,

    Quel est le message d'erreur? A quoi ressemble les chaines contenues dans $decoupe?
    2
    1. Contributeur
      j'ajouterai aussi : donne des exemples de ce que tu as dans $decoupe en entrée et de ce que tu veux obtenir en sortie.

      sinon : comme illustré dans les exemples sur https://www.php.net/manual/fr/function.preg-replace.php l'expression (1er paramètre) doit commencer et se terminer par un slash : /

      par ailleurs, dans le 2ème paramètre, il est mieux d'écrire $1 et $2 au lieu de \\1 et \\2

      Dal
      0
  2. Voici mon code :

    <?php
    function MiseEnForme2($param) {
      $lgmax = 20;
      $decoupe = explode(" ",$param);
      $j = 0; 
      for ($i = 0; $i < count($decoupe); $i++) {
        if ($j < strlen($decoupe[$i])) { $j = strlen($decoupe[$i]); }    
      }
      if ($j < $lgmax) { return $param; }
      for ($i = 0; $i < count($decoupe); $i++) {
        if ($lgmax < strlen($decoupe[$i])) { 
          $decoupe[$i] = substr($decoupe[$i], 0, $lgmax) . " " . MiseEnForme(substr($decoupe[$i], $lgmax, strlen($decoupe[$i])));
        }    
        if ($i == 0) { $result = $decoupe[$i]; } else { $result .= " " . $decoupe[$i]; }
      }  
      return $result;
    }
    
    function MiseEnForme($param) {
      $lgmax = 20;
      if (strlen($param) < $lgmax) { return $param; }
      $decoupe = explode(" ",$param);
      $j = 0; 
      for ($i = 0; $i < count($decoupe); $i++) {
        if ($j < strlen($decoupe[$i])) { $j = strlen($decoupe[$i]); }    
      }
      if ($j < $lgmax) { return $param; }
      for ($i = 0; $i < count($decoupe); $i++) {
        if ($lgmax < strlen($decoupe[$i])) { 
          $decoupe[$i] = ereg_replace("([A-Za-z0-9])([^ A-Za-z0-9])", "\\1 \\2", $decoupe[$i]);      
          $decoupe[$i] = ereg_replace("([^ A-Za-z0-9])([A-Za-z0-9])", "\\1 \\2", $decoupe[$i]);      
        }
        if ($i == 0) { $result = $decoupe[$i]; } else { $result .= " " . $decoupe[$i]; }
      } 
    return MiseEnForme2($result);
    }
    0
    1. Contributeur
      Tu n'as tenu compte d'aucun de nos commentaires :-(

      Modifie comme déjà proposé là :

      $decoupe[$i] = preg_replace("/([A-Za-z0-9])([^ A-Za-z0-9])/", "$1 $2", $decoupe[$i]);         
      $decoupe[$i] = preg_replace("/([^ A-Za-z0-9])([A-Za-z0-9])/", "$1 $2", $decoupe[$i]);  

      Comme tu ne donnes pas d'exemples de ce qui doit figurer dans $decoupe, ni d'exemple de ce que tu attends du résultat de preg_replace, on ne peut pas te dire si tes regex font ce que tu penses qu'elles font.

      Pour moi, cette combinaison de regex se contente d'insérer des espaces pour séparer les caractères alphanumériques ASCII des autres.

      Par exemple :

      https://forums.commentcamarche.net/forum/affich-27559890-fonction-ereg-replace-is-deprecated 

      devient

      http :// www . commentcamarche . net / forum / affich - 27559890 - fonction - ereg - replace - is - deprecated

      Si tu veux faire autre chose, dis le, stp.

      Dal
      0
    2. Ca fonctionne c'était sa ! Merci Dal
      0
  3. modifie ton fichier php.ini la ligne de error_reporting par ça :

    error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
    -2