如何使用PHP去除非字母,数字,空格或puncutation的所有字符?
我尝试了以下内容,但它删除了标点符号。
preg_replace("/[^a-zA-Z0-9\s]/", "", $str);
答案 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( ""","'","&","<",">"),' ',$str);
$str = preg_replace('/[^0-9a-zA-Z-]/', ' ', $str);
$str = preg_replace('/\s\s+/', ' ', $str);
$str = trim($str);
$str = preg_replace('/[ ]/', '-', $str);
希望这有帮助。