PHP Regex Strip Away All Emojis

时间:2015-12-12 03:43:26

标签: 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;
}

当我想要打印时,表情符号被打印出来&#34;字符串为空。&#34;。

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

2 个答案:

答案 0 :(得分:3)

您的模式不正确。如果要删除所提供列表中的所有字符,则必须使用否定字符类:[^...]。此外,目前,[]被用作分隔符,这意味着该模式不被视为字符类。

模式应为:

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

现在应该删除表情符号并打印您的信息。

答案 1 :(得分:2)

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

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

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

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