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

Signaler
Messages postés
45
Date d'inscription
vendredi 12 juin 2015
Statut
Membre
Dernière intervention
9 avril 2020
-
Messages postés
4758
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
2 juillet 2020
-
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

Messages postés
5388
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
15 juillet 2020
885
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
Messages postés
14492
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 juillet 2020
555
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.
Messages postés
245
Date d'inscription
mardi 21 août 2018
Statut
Membre
Dernière intervention
16 avril 2020
71
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é ;)

Messages postés
5388
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
15 juillet 2020
885
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, .
Messages postés
14492
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 juillet 2020
555
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

Messages postés
245
Date d'inscription
mardi 21 août 2018
Statut
Membre
Dernière intervention
16 avril 2020
71
Je t'invite à tester, tu va être surpris, ça marche très bien même si il y a 3 ou 1883 espaces
Messages postés
4758
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
2 juillet 2020
1 035 >
Messages postés
245
Date d'inscription
mardi 21 août 2018
Statut
Membre
Dernière intervention
16 avril 2020

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.