Rumah  >  Soal Jawab  >  teks badan

PHP memangkas ruang unicode

Saya cuba memangkas ruang unicode seperti aksara ini dan saya dapat melakukannya menggunakan penyelesaian ini. Masalah dengan penyelesaian ini ialah ia tidak memangkas ruang unikod antara aksara biasa. Sebagai contoh, yang ini menggunakan ruang nipis

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

Saya tahu serba sedikit tentang ungkapan biasa, jadi saya tidak tahu apa yang perlu diubah ekspresi saya untuk menyelesaikan masalah ini

P粉163951336P粉163951336310 hari yang lalu911

membalas semua(2)saya akan balas

  • P粉557957970

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

    Untuk mengalih keluar semua ruang putih Unicode dengan aksara kawalan pada permulaan dan akhir rentetan, dan untuk mengalih keluar semua ruang putih Unicode dengan aksara kawalan kecuali ruang putih biasa di mana-mana dalam rentetan, anda boleh menggunakan

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

    Lihat Demo Ungkapan Biasa #1 dan Ungkapan Biasa Demo #2.

    Butiran

    • ^[pZpC]+ - satu atau lebih ruang atau aksara kawalan pada permulaan rentetan
    • | - atau
    • [pZpC]+$ - satu atau lebih ruang atau aksara kawalan
    • di hujung rentetan
    • | - atau
    • (?! )[pZpC] - Satu atau lebih ruang atau aksara kawalan di mana-mana dalam rentetan selain daripada ruang biasa
    • Mana-mana ruang kecuali
    • [^S ] - 除常规空格 (x20)

    Jika anda juga perlu "mengecualikan" baris baharu biasa, gantikan (?! )[pZpC] 替换为 (?![ rn])[ pZpC]由 @MonkeyZeus 建议) ,在第二个正则表达式中,这意味着您需要使用 [^S rn] dengan (?![ rn])[ pZpC] (Disyorkan oleh @MonkeyZeus

    ), dalam regex kedua ini bermakna anda perlu menggunakan [^S rn].

    Lihat Demo 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
    

    balas
    0
  • P粉445750942

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

    Bagaimana ruang Unikod seperti u{2009} boleh menyebabkan masalah di tempat yang berbeza. Jadi saya akan menggantikan semua ruang unicode dengan ruang biasa dan kemudian menggunakan 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

    Nota: Perwakilan rentetan dalam ulasan diwakili oleh nyahpepijat::writeUni($string, $trimString);. Dilaksanakan dari kelas ini.

    balas
    0
  • Batalbalas