Pour supprimer tous les espaces blancs Unicode avec les caractères de contrôle au début et à la fin de la chaîne, et supprimer tous les espaces blancs Unicode avec les caractères de contrôle autres que l'espace normal n'importe où dans la chaîne, vous pouvez utiliser
preg_replace('/^[\pZ\pC]+|[\pZ\pC]+$|(?! )[\pZ\pC]/u', '', $string)
// Or, simply
preg_replace('/^\s+|\s+$|[^\S ]/u', '', $string)
Ver el Démonstration de regex #1 et regex démo #2 .
Détails
-
^[\pZ\pC]+
- un ou plusieurs caractères d'espacement ou de contrôle au début de la chaîne de caractères
-
|
- ou
-
[\pZ\pC]+$
- un ou plusieurs caractères d'espacement ou de contrôle à la fin de la chaîne de caractères
-
|
- ou
-
(?! )[\pZ\pC]
- un ou plusieurs espaces ou caractères de contrôle autres qu'un espace normal, n'importe où dans la chaîne de caractères
-
[^\S ]
- tout espace blanc autre qu'un espace normal ( \x20
)
Si vous devez également "exclure" les caractères de retour à la ligne courants, remplacez (?! )[\pZ\pC]
con (?![ \r\n])[\pZ\pC]
(comme suggéré par @MonkeyZeus ), dans la deuxième regex, cela signifie que vous devez utiliser [^\S \r\n]
.
Ver Démo PHP :
echo preg_replace('~^[\pZ\pC]+|[\pZ\pC]+$|(?! )[\pZ\pC]~u', '', 'abc def ghi ');
// => abc defghi
echo preg_replace('/^\s+|\s+$|[^\S ]/u', '', 'abc def ghi ');
// => abc defghi