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 保留字母数字 + 拉丁语 + 表情符号的主要内容,如果未能解决你的问题,请参考以下文章

字符串字体比较算法

算法:拉丁方阵(Latin Square)

去除所有非字母数字字符的电话号码

微信通讯录ABCD是啥意思

php 正则只保留 汉字 字母 数字

CSS---文本相关属性