PHP memangkas ruang unicode
P粉163951336
P粉163951336 2023-11-13 08:49:45
0
2
1023

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粉163951336
P粉163951336

membalas semua(2)
P粉557957970

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

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan