从字符串中删除"非常"的特殊字符

Pat*_*ski 1 php character

如何从字符串中删除"非常"的特殊字符?

心,星,公牛,版权等字符.

我找到了这个:

$re = "/\\p{S}/i";
$str = "asdas?sadsad";
$subst = "";

$result = preg_replace($re, $subst, $str);
Run Code Online (Sandbox Code Playgroud)

但它删除太多(例如"+"char).

Ped*_*ito 5

您可以使用POSIX字符类print(ASCII墨水用户加上宽大的空格),即:

$str = "asdas?sadsad";
$str = preg_replace('/[^[:print:]]/', '', $str);

echo $str;
Run Code Online (Sandbox Code Playgroud)

输出:

asdassadsad
Run Code Online (Sandbox Code Playgroud)

正则表达式说明:

[^[:print:]]
Run Code Online (Sandbox Code Playgroud)
  • 匹配POSIX字符类中不存在的任何字符print «[^[:print:]]»

Demo


根据您的评论更新:

$str = "asdas?sadsad";
$str = preg_replace('/[^`1234567890qwertyuiop\[\]asdfghjkl;\'zxcvbnm,\.-~!@%\^&\*\(\)_\+\{\}:\|<>\??????ó??QWERTYUIOPASDFGHJKLZXCVBNM?????Ó??]/i', '', $str);
echo $str; 
Run Code Online (Sandbox Code Playgroud)

替换列表中不包含的所有字符.


Demo 2