2011-12-04 70 views
1

如果找到兩個以上的非字母數字字符,我一直試圖替換字符串的一部分。php替換如果兩個或更多的非字母數字字符

我有它的部分工作,但不能取代當下劃線在那裏。

這就是我想要的。

$str = "-dxs_ s"; 

$str = preg_replace('/\W{2,}|\_{2,}/', ' ', $str); 

reults在-dxs_ s應該-dxs s

那麼如果在字符串中找到兩個或更多的非字母數字字符,該如何替換?

+0

「憲章」 - >「字符」出於某種原因,沒有在這個問題上沒有編輯按鈕雖然。 – jli

回答

1

只需

$str = preg_replace('/(\W|_){2,}/', ' ', $str); 

這是什麼東西做的是分組的「無字或下劃線」部分和2+量詞適用於它作爲一個整體。

See it in action

+0

你說這會導致'-dxss',只有'replacement'是空的沒有空間時,情況是這樣嗎? – david

+0

@david:Doh!是的,我沒有看到報價之間的空間。虛驚一場,對不起! – Jon

+0

您的權利,這是很難注意到額外的空間,謝謝! – david

1

\W也排除因此_,你需要自己的人物等級:

/[^a-zA-Z0-9]{2,}/ 

$result = preg_replace('/[^a-z\d]{2,}/i', ' ', $subject); 
+1

+1運作良好,感謝您解釋\ W如何排除下劃線 – david