2013-02-04 148 views
1

我有一些標題,例如:PHP的preg_replace匹配特殊字符,而不是UTF8字母

should? be fenêtre! 

ﻟﻔﺮﻧﺴﻴﺔ-تعاني!!! 

可以使用哪些正則表達式來去除特殊字符,例如:?!,^

我需要讓這些標題是這樣的:

should-be-fenêtre 

ﻟﻔﺮﻧﺴﻴﺔ-تعاني 

我試圖

$name = preg_replace("~[\x00-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+~", "-", $name); 

,但我得到

Warning: preg_replace(): No ending delimiter '~' found in 

感謝

+0

通過「特殊字符」你居然意味着標點符號? –

+0

是的,所有字符如:。,?/ *&^%$等。 – gtht90

回答

3

您可以使用一對夫婦正則表達式來去掉任何不是一個字母或數字和凝結空白的運行和破折號只是一個單一的破折號:

// Replaces every non-letter, non-digit with a slash 
$str = preg_replace('/(?=\P{Nd})\P{L}/u', '-', $str); 

// Replaces runs of whitespace and dashes with a single dash 
$str = preg_replace('/[\s-]{2,}/u', '-', $str); 
+0

謝謝。你能說出\ P {Nd}和\ P {L}做什麼嗎? – gtht90

+0

@ gtht90:請參閱http://php.net/manual/en/regexp.reference.unicode.php – Jon

0

試試這個:

$text = preg_replace("/(?![.=$'€%-])\p{P}/u", "", $text); 

只要改變斷言,以匹配您想保留任何Unicode字符。

相關問題