Gérer les espaces avec regex [Résolu]

Messages postés
32
Date d'inscription
vendredi 12 juin 2015
Statut
Membre
Dernière intervention
17 septembre 2019
- - Dernière réponse : ElementW
Messages postés
4886
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
1 septembre 2019
- 29 août 2019 à 20:44
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
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
5217
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
20 septembre 2019
801
1
Merci
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

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 59712 internautes nous ont dit merci ce mois-ci

Whismeril
Messages postés
13740
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 septembre 2019
387 -
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.
Commenter la réponse de [Dal]
Messages postés
248
Date d'inscription
mardi 21 août 2018
Statut
Membre
Dernière intervention
8 septembre 2019
52
0
Merci
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é ;)

[Dal]
Messages postés
5217
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
20 septembre 2019
801 -
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, .
Commenter la réponse de SioGabx
Messages postés
13740
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 septembre 2019
387
0
Merci
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

SioGabx
Messages postés
248
Date d'inscription
mardi 21 août 2018
Statut
Membre
Dernière intervention
8 septembre 2019
52 -
Je t'invite à tester, tu va être surpris, ça marche très bien même si il y a 3 ou 1883 espaces
ElementW
Messages postés
4886
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
1 septembre 2019
854 > SioGabx
Messages postés
248
Date d'inscription
mardi 21 août 2018
Statut
Membre
Dernière intervention
8 septembre 2019
-
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.
Commenter la réponse de Whismeril