1. 程式人生 > >去掉中文空格的PHP正則程式碼

去掉中文空格的PHP正則程式碼

http://www.cnblogs.com/kuyuecs/archive/2011/04/15/1689000.html

中文空格這裡面有好幾種:沒有簡單的解決問題的方式,比如半形全形空格,比如段落符都會顯示為空白的,然後讓人們誤解它是空格,所以去掉空格之前一定要先確認自己的是不是空格,我下面分析一下這兩種的解決辦法。


(1)/[\s| ]+/這個就可以,注意|後面的跟的是全形空格


(2)mb中的正則替換也可以試試


另外注意使用Unicode的時候,加上正則表示式描述符u


但由於漢語中顯示為空格模樣的有很多個,比如說我下面碰到的這麼一個,它的unicode編碼為C2A0,使用下面的表示式就能解決問題。




$new['content'] = preg_replace('/^[(\xc2\xa0)|\s]+/', '', $new['content']);




這裡有個細節: \xc2a0本來是一個Unicode字元,但是不能匹配多個,只能替換一個,【這裡可能是因為位元組的原因】後來突然找到這麼一種寫法,解決了問題,另外為了避免,中文空格和英文空格相混雜的情形,後面又加了個\s來清除。




其實在Unicode上的正則表示式確實不怎麼好用。 




其他參考:


日常我們處理資料時經常會產生額外的空格,如果你想進行諸如比較字串時,就會引致問題;同時也浪費額外的儲存空間。


如何除掉空格?也許你首先會想到PHP內建函式trim()。沒錯,它處理字元的始末部分確實有效,但是,這種情況下它就辦不到了:將多個空格變為一個空格,將空格變為有序的規則的佇列等等…


於是,正則表示式就派上用場了。看看下面的程式碼:


$str = ” This line contains\tliberal \r\n use of   whitespace.\n\n”;


// 首先去掉頭尾空格
$str = trim($str);


// 接著去掉兩個空格以上的
$str = preg_replace(’/\s(?=\s)/’, '', $str);


// 最後將非空格替換為一個空格
$str = preg_replace(’/[\n\r\t]/’, ' ', $str);


使用上面的例子可以去掉所有多餘的空格。首先使用TRim()去頭尾空格,接著用preg_replace()去掉重複的空格。
當中的(?=)表示只匹配後面的空格跟隨前面的空格的空格。