2011-12-01 282 views
13

如何以多字節安全方式從字符串中刪除字符,如標點符號,逗號,短劃線等?正則表達式從UTF8字符串中刪除非字母數字字符

我將與輸入來自許多不同的語言來工作,我想知道是否有東西,可以幫我這個

感謝

+0

你想只保留一個' - z'和'0-9'?或者是來自不同語言的所有特殊字符? – Marcus

+0

解釋爲什麼我的結果建議更好的方法。 – 2011-12-01 20:19:40

+0

@馬庫斯。我需要保留unicode字符 – Thomas

回答

24

有Unicode字符類thingys,您可以使用:

要匹配任何非字母符號,您可以使用\PL+,否定\p{L}。要不刪除空格,請使用像[^\pL\s]+這樣的charclass。或者真的只是刪除標點符號\pP+

那麼,顯然不要忘記正則表達式/u修飾符。

+0

我認爲這個有潛力。我需要調查。謝謝馬里奧 – Thomas

+2

[^ \ pL \ s] +是贏家 – Thomas

+0

不知道轉義序列在括號'[]'中工作。謝謝 –

0

也許這將是有益的?

$newstring = preg_replace('/[^0-9a-zA-Z\s]/', $oldstring); 
+2

這也會刪除非ASCII字符。我不想要這個 – Thomas

1

我用這個:

$clean = preg_replace("/[^\p{L}|\p{N}]+/u", " ", $raw); 
$clean = preg_replace("/[\p{Z}]{2,}/u", " ", $clean); 
+0

你能描述一下究竟發生了什麼嗎? –

相關問題