Gérer les espaces avec regex

Résolu/Fermé
nantenaina67 Messages postés 53 Date d'inscription vendredi 12 juin 2015 Statut Membre Dernière intervention 20 février 2022 - 29 août 2019 à 10:13
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 - 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
A voir également:

3 réponses

[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094
29 août 2019 à 18:54
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
Utilisateur anonyme
29 août 2019 à 19:15
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
SioGabx Messages postés 265 Date d'inscription mardi 21 août 2018 Statut Membre Dernière intervention 17 novembre 2022 100
Modifié le 29 août 2019 à 10:37
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
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094
Modifié le 29 août 2019 à 18:34
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
Utilisateur anonyme
29 août 2019 à 15:17
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
SioGabx Messages postés 265 Date d'inscription mardi 21 août 2018 Statut Membre Dernière intervention 17 novembre 2022 100
Modifié le 29 août 2019 à 16:45
Je t'invite à tester, tu va être surpris, ça marche très bien même si il y a 3 ou 1883 espaces
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228 > SioGabx Messages postés 265 Date d'inscription mardi 21 août 2018 Statut Membre Dernière intervention 17 novembre 2022
29 août 2019 à 20:44
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