preg_replace 保留字母数字 + 拉丁语 + 表情符号
Posted
技术标签:
【中文标题】preg_replace 保留字母数字 + 拉丁语 + 表情符号【英文标题】:preg_replace keep alphanumeric + Latin + emojis 【发布时间】:2020-10-29 22:52:17 【问题描述】:我需要过滤除字母数字、拉丁字符和表情符号之外的所有内容
$str="Hello José' []()✅????????., welcome";
想要的结果:
你好何塞✅??????????欢迎
echo preg_replace("/[^\pLatin \wp-]/u",'',$str); // this is what i need
但我还需要保留表情符号✅????????
我有 2 个,但一个也删除了表情符号,另一个保留了表情符号但删除了其他所有内容。 我需要这两个组合
preg_replace("/[^\pLatin \wp-]/u",'',$str);
preg_replace("/[ -\x2122]\s+|\s*[ -\x2122]/u",'',$str);
【问题讨论】:
preg_replace("/(?!-)\pP/u",'',$str)
是否适合您?
【参考方案1】:
preg_replace("/[^\pLatin \x200d\x2600-\x1FAFF0-9]/u",'',$str)
\x2600-\x1F6FF 区域仍然包含一些不是表情符号的字符。详情见here。可能指定几个区域。我已经包含了数字 0-9。
【讨论】:
一些表情符号(可能是新的)被排除在外,但通过将结束范围设置为 1FAFF,它们都被包括在内preg_replace("/[^\pLatin \x2600-\x1FAFF0-9+]/u",'',$str);
可能有点离题但是 '$str="?️?";回声“?️?”;回声“”;回声 $str; echo preg_replace("/[^\p拉丁 \x2600-\x1FAFF0-9+]/u",'',$str);'在 preg_replace 之前它保持 1 个表情符号,而在 preg_replace 之后它们变成 2 个表情符号有没有办法防止这种情况发生。
Wiktor Stribizew 您的代码不会像 .我真正需要的是字母数字+拉丁字符+表情符号。没有别的 jspit 答案可以做到这一切,只有组合表情符号有一个小问题。像“rainbowflag”变成“flag”+“Rainbow”。其余的他的代码工作正常
@david 很好,但你应该知道在 php 正则表达式中没有办法正确匹配所有表情符号,因为它有模式限制,并且正确匹配表情符号的正则表达式很长。如果可能,您应该尝试提出一个反向逻辑,否则请使用足够好的解决方法。
我已经编辑了我的帖子。这是否解决了组合表情符号的问题? Wiktor 的评论原则上是正确的。他的方法可以很容易地扩展为仍应删除的字符:preg_replace("/(?!-)[\pP$]/u",'',$str)以上是关于preg_replace 保留字母数字 + 拉丁语 + 表情符号的主要内容,如果未能解决你的问题,请参考以下文章