Maison  >  Questions et réponses  >  le corps du texte

PHP coupe les espaces Unicode

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粉163951336P粉163951336310 Il y a quelques jours908

répondre à tous(2)je répondrai

  • P粉557957970

    P粉5579579702023-11-14 00:59:08

    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
    

    répondre
    0
  • P粉445750942

    P粉4457509422023-11-14 00:22:00

    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.

    répondre
    0
  • Annulerrépondre