首页 > 解决方案 > 当我在字符串开头使用表情符号时,正则表达式无法按预期工作

问题描述

我的代码是用PHP. 我试图将我发送的电子邮件的主题存储在我的数据库中,只有在我删除了包含在这些电子邮件主题行中的表情符号之后。我创建了这个正则表达式:

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

当我在字符串末尾有表情符号时,它可以工作,例如:

在此处输入图像描述

但是,如果我在字符串的开头有表情符号,它就不起作用,该条目甚至没有存储在我的数据库中:

在此处输入图像描述

您可以在我的正则表达式中识别出任何问题以实现我想要的吗?

更新1:显然正则表达式很好:

在此处输入图像描述

标签: phpregex

解决方案


这可能是编码问题(3v4l 示例):

echo utf8_encode('⌨️,,, Learning Online: Digital Marketing Course');
// Output: ⌨ï¸,🖥,🖨, Learning Online: Digital Marketing Course

当您尝试使用您的模式进行匹配时,这会失败(请参阅此处),但是如果您匹配任意数量的非单词字符而没有像这里这样的全局标志,则您匹配整个表情符号。

使用preg_match()它变成:

$re = '/\W*/';
$str = 'â¨ï¸,ð¥,ð¨, Learning online: Digital Marketing Course';
$subst = '';

$result = preg_replace($re, $subst, $str, 1);

echo "The result of the substitution is ".$result;
// Output: Learning online: Digital Marketing Course

推荐阅读