PHP 正则表达式去掉所有表情符号

Sta*_*wer 4 php regex emoji

我正在尝试使用正则表达式从字符串中删除所有不允许的字符。这是我当前的 php 代码

$input = "";

$pattern = "[a-zA-Z0-9_ !@#$%^&*();\\\/|<>\"'+\-.,:?=]";
$message = preg_replace($pattern,"",$input);

if (empty($message)) {
    echo "The string is empty";
}
else {
    echo $message;
}
Run Code Online (Sandbox Code Playgroud)

当我运行此程序时,当我希望它打印出“字符串为空”时,表情符号会被打印出来。

当我将正则表达式代码放入http://regexr.com/时,它显示表情符号不匹配,但是当我运行代码时,它会被打印出来。有什么建议么?

Bru*_*uno 8

这种模式应该可以解决问题:

$filteredString = preg_replace('/([^-\p{L}\x00-\x7F]+)/u', '', $rawString);

有些序列非常罕见,所以让我们解释一下它们:

  • \p{L}匹配任何语言的任何类型的字母
  • \x00-\x7F(索引 0) 和 (索引 127) 之间的单个字符(区分大小写)
  • u打开与 Perl 不兼容的 PCRE 附加功能的修饰符。模式和主题字符串被视为 UTF-8。