正则表达式:剥离非字母数字或标点符号

时间:2010-06-16 02:22:51

标签: php regex string

如何使用PHP去除非字母,数字,空格或puncutation的所有字符?

我尝试了以下内容,但它删除了标点符号。

preg_replace("/[^a-zA-Z0-9\s]/", "", $str);

3 个答案:

答案 0 :(得分:31)

preg_replace("/[^a-zA-Z0-9\s\p{P}]/", "", $str);

示例:

php > echo preg_replace("/[^a-zA-Z0-9\s\p{P}]/", "", "⟺f✆oo☃. ba⟗r!");
foo. bar!

\p{P}匹配所有Unicode标点字符(请参阅Unicode character properties)。如果您只想允许特定的标点符号,只需将它们添加到否定的字符类。 E.g:

preg_replace("/[^a-zA-Z0-9\s.?!]/", "", $str);

答案 1 :(得分:3)

您将不得不明确列出标点符号,因为没有简写(例如\s是空白字符的简写)。

preg_replace('/[^a-zA-Z0-9\s\-=+\|!@#$%^&*()`~\[\]{};:\'",<.>\/?]/', '', $str);

答案 2 :(得分:0)

$str = trim($str);
$str = trim($str, "\x00..\x1F");
$str = str_replace(array( "&quot;","&#039;","&amp;","&lt;","&gt;"),' ',$str);
$str = preg_replace('/[^0-9a-zA-Z-]/', ' ', $str);
$str = preg_replace('/\s\s+/', ' ', $str); 
$str = trim($str);
$str = preg_replace('/[ ]/', '-', $str);

希望这有帮助。