正则表达式:去除非字母数字或标点符号

2022-08-30 17:10:09

如何使用PHP去掉所有不是字母,数字,空格或标点符号的字符?

我尝试了以下方法,但它去除了标点符号。

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

答案 1
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 字符属性)。如果只想允许特定的标点符号,只需将它们添加到否定字符类中即可。例如:

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

答案 2

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

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

推荐