PHP 正则表达式去除所有表情符号
PHP Regex Strip Away All Emojis
我正在尝试使用正则表达式从字符串中去除所有不允许的字符。这是我当前的 php 代码
$input = "";
$pattern = "[a-zA-Z0-9_ !@#$%^&*();\\/|<>\"'+\-.,:?=]";
$message = preg_replace($pattern,"",$input);
if (empty($message)) {
echo "The string is empty";
}
else {
echo $message;
}
表情符号在我 运行 想要打印出来时打印出来 "The string is empty."。
当我将我的正则表达式代码放入 http://regexr.com/ 时,它显示表情符号不匹配,但是当我 运行 代码时,它被打印出来了。有什么建议吗?
您的模式不正确。如果你想去掉列表中所有 不是 的字符,那么你必须使用否定字符 class:[^...]
。此外,目前,[
和 ]
被用作分隔符,这意味着该模式不被视为字符 class。
模式应该是:
$pattern = "~[^a-zA-Z0-9_ !@#$%^&*();\\/|<>\"'+.,:?=-]~";
现在应该去掉表情符号并打印您的消息。
这个模式应该可以解决问题:
$filteredString = preg_replace('/([^-\p{L}\x00-\x7F]+)/u', '', $rawString);
有些序列很少见,所以让我们解释一下:
\p{L}
匹配来自任何语言的任何类型的字母
\x00-\x7F
(index 0) 和 (index 127) 之间的单个字符(区分大小写)
u
修饰符,用于打开与 Perl 不兼容的 PCRE 附加功能。模式和主题字符串被视为 UTF-8。
我正在尝试使用正则表达式从字符串中去除所有不允许的字符。这是我当前的 php 代码
$input = "";
$pattern = "[a-zA-Z0-9_ !@#$%^&*();\\/|<>\"'+\-.,:?=]";
$message = preg_replace($pattern,"",$input);
if (empty($message)) {
echo "The string is empty";
}
else {
echo $message;
}
表情符号在我 运行 想要打印出来时打印出来 "The string is empty."。
当我将我的正则表达式代码放入 http://regexr.com/ 时,它显示表情符号不匹配,但是当我 运行 代码时,它被打印出来了。有什么建议吗?
您的模式不正确。如果你想去掉列表中所有 不是 的字符,那么你必须使用否定字符 class:[^...]
。此外,目前,[
和 ]
被用作分隔符,这意味着该模式不被视为字符 class。
模式应该是:
$pattern = "~[^a-zA-Z0-9_ !@#$%^&*();\\/|<>\"'+.,:?=-]~";
现在应该去掉表情符号并打印您的消息。
这个模式应该可以解决问题:
$filteredString = preg_replace('/([^-\p{L}\x00-\x7F]+)/u', '', $rawString);
有些序列很少见,所以让我们解释一下:
\p{L}
匹配来自任何语言的任何类型的字母\x00-\x7F
(index 0) 和 (index 127) 之间的单个字符(区分大小写)u
修饰符,用于打开与 Perl 不兼容的 PCRE 附加功能。模式和主题字符串被视为 UTF-8。