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

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)

VoirExpressions régulières Démo #1et Expressions régulièresDé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 decette 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!