Gérer les espaces avec regex

Résolu
nantenaina67 Messages postés 53 Date d'inscription   Statut Membre Dernière intervention   -  
ElementW Messages postés 5690 Statut Contributeur -
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. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    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
    1. Utilisateur anonyme
       
      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.
      0
  2. SioGabx Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   100
     
    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é ;)

    0
    1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      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, .
      0
  3. Utilisateur anonyme
     
    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

    0
    1. SioGabx Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   100
       
      Je t'invite à tester, tu va être surpris, ça marche très bien même si il y a 3 ou 1883 espaces
      0
      1. ElementW Messages postés 5690 Statut Contributeur 1 293 > SioGabx Messages postés 260 Date d'inscription   Statut Membre Dernière intervention  
         
        Non.
        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.
        0