Gérer les espaces avec regex

Résolu
bonjour à vous tous ! qui peut me donner le regex dont le but est le suivant: remplacer un ou plusieurs espaces consécutif par un seul ! ex: si l'utilisateur m'envoie ses prénoms, dont il met plusieurs espaces entre les deux prénoms, je le remplace par un seul

3 réponses

  1. Contributeur
    Salut nantenaina67,

    La documentation de
    preg_replace()
    donne, dans son "Example #4 Strip whitespace", la regexp recommandée.

    https://www.php.net/manual/en/function.preg-replace.php

    Example #4 Strip whitespace

    This example strips excess whitespace from a string.


    <?php
    $str = 'foo   o';
    $str = preg_replace('/\s\s+/', ' ', $str);
    // This will be 'foo o' now
    ?>

    Tu peux aussi utiliser celle proposée par Whismeril, qui fonctionne aussi très bien, et qui donnerait ceci intégrée à la syntaxe de
    preg_replace()
    :
    $str = preg_replace('/ {2,}/', ' ', $str);
    ...

    Dal
    1. Salut [Dal], la regex que tu montre supprime les espaces, tabulations, \n etc... tout ça combiné.
      @SioGabx, comme le dit [Dal], c'est le navigateur qui fait le ménage à l'affichage, un exemple tout bête est un code sans les balises de code, y'a pas d'indentation.
  2. Salut, pas besoin de regex pour ça :

    $nom = "Lorem     Ipsum";
    $nomsansespace = str_replace("  ", " ", $nom);
    echo $nomsansespace;
    //output : "Lorem ipsum"
    


    N'oublie pas de cliquer sur "Merci" et de mettre en résolu si ça t'as aidé ;)

    1. Contributeur
      L'affichage par le navigateur écrase les espaces, mais ils sont bien là et tu le vois si au lieu de faire ton echo, tu fais
      echo "<pre>$nomsansespace</pre>";
      .

      Le résultat, là.
  3. Bonjour
    Et si y’a 3 ou plus espaces? Ça ne marche pas ton code.
    Une regex est en fait très adaptée
    Voici un exemple, copie colle ce lien, et clique sur l’onglet « Context »
    http://regexstorm.net/tester?p=+%7b2%2c%7d&i=Un+espace%3d%3epas+de+remplacement%2c+deux++espaces%3d%3eremplacement%2c+trois+++espaces%2c+quatre++++espaces%2c+ou+plus%3d%3eremplacement&r=E

    1. Je t'invite à tester, tu va être surpris, ça marche très bien même si il y a 3 ou 1883 espaces
    2. Contributeur
      @SioGabxNon.
      php > echo str_replace("  ", " ", "Lorem                                                           Ipsum");
      Lorem                              Ipsum
      
      Et la doc de
      str_replace
      en dit autant.
      Si tu testes dans un navigateur il faut sortir en
      text/plain
      , voir le "Code source de la page", ou regarder dans les outils développeur pour voir la réponse brute.