PHP coupe les espaces Unicode
P粉163951336
P粉163951336 2023-11-13 08:49:45
0
2
897

J'essaie de couper les espaces Unicode comme ce caractère et j'ai pu le faire en utilisant cette solution. Le problème avec cette solution est qu'elle ne supprime pas les espaces Unicode entre les caractères normaux. Par exemple, celui-ci utilise un espace mince

$string = "   test   string   ";
echo preg_replace('/^[pZpC]+|[pZpC]+$/u', '', $string);
// outputs: test   string

Je connais un peu les expressions régulières, donc je ne sais pas quoi changer mon expression pour résoudre ce problème

P粉163951336
P粉163951336

répondre à tous(2)
P粉557957970

Pour supprimer tous les espaces Unicode avec des caractères de contrôle au début et à la fin d'une chaîne, et pour supprimer tous les espaces Unicode avec des caractères de contrôle, à l'exception des espaces normaux n'importe où dans une chaîne, vous pouvez utiliser

preg_replace('/^[\pZ\pC]+|[\pZ\pC]+$|(?! )[\pZ\pC]/u', '', $string)
// Or, simply
preg_replace('/^\s+|\s+$|[^\S ]/u', '', $string)

Voir Expressions régulières Démo #1 et Expressions régulières Démo #2.

Détails

  • ^[pZpC]+ - un ou plusieurs espaces ou caractères de contrôle en début de chaîne
  • | - ou
  • [pZpC]+$ - un ou plusieurs espaces ou caractères de contrôle
  • à la fin de la chaîne
  • | - ou
  • (?! )[pZpC] - Un ou plusieurs espaces ou caractères de contrôle n'importe où dans la chaîne autre que les espaces normaux
  • Tous les espaces sauf
  • [^S ] - 除常规空格 (x20)

Si vous devez également "exclure" les nouvelles lignes courantes, remplacez (?! )[pZpC] 替换为 (?![ rn])[ pZpC]由 @MonkeyZeus 建议) ,在第二个正则表达式中,这意味着您需要使用 [^S rn] par (?![ rn])[ pZpC] (Suggéré par @MonkeyZeus

), dans la deuxième regex, cela signifie que vous devez utiliser [^S rn].

Voir la 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
P粉445750942

Comment les espaces Unicode comme u{2009} peuvent causer des problèmes à différents endroits. Je remplacerais donc tous les espaces Unicode par des espaces réguliers, puis appliquerais trim().

$string = "   test   string and XY \t ";
//\u{2009}\u{2009}\u{2009}test\u{2009}\u{2009}\u{2009}string\u{2009}and\x20XY\x20\x09\u{2009}

$trimString = trim(preg_replace('/[\pZ\pC]/u', ' ', $string));
//test\x20\x20\x20string\x20and\x20XY

Remarque : La représentation des chaînes dans les commentaires est représentée par debug::writeUni($string, $trimString);. Implémenté à partir de cette classe.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!