Swift 中判断字符串是否有 Emoji 表情

更新:网络上流传的 emoji 代码点不太完整,我按照维基百科的资料重新整理了一下,文中的 Swift 版本代码已更新。


很多时候我们需要判断一个字符、或者说是一句话里是不是包含了emoji,使用 Swift 语言开发 app 也不例外,比如可以使用正则表达式——但很遗憾,似乎不同的语言对于正则表达式的支持区别, \u  这个功能不是到哪都好使的,所以最简单粗暴的办法,我们弄一个字符串,它包含了所有可能会用到的 emoji,然后去检索它:

其实吧,说句良心哈,效率还不错……当然了,这样的结果就是你的列表得时常更新——同时你还得忍受 Xcode 卡得一逼的状态。

使用遍历

所以,网上有一个用 OC 实现的扩展,似乎流传很广:

其实它的原理还是去匹配 Emoji 所在区间,所以,如果我们应用上 Swift 语句以及其特性,那么 Swift 版本就是这样:

?是不是很简洁?

代码来自:Check if Swift string contains an emoji or dingbat charater

本文由 落格博客 原创撰写:落格博客 » Swift 中判断字符串是否有 Emoji 表情

转载请保留出处和原文链接:https://www.logcg.com/archives/2504.html

About the Author

R0uter

如非声明,本人所著文章均为原创手打,转载请注明本页面链接和我的名字。

Comments

    1. 用正则原理也是一样,匹配emoji区间范围,可以用正则啊。只是写这篇文章的时候我没想到可以用正则,我对这个也不熟练罢了。
      不过由于emoji一直在演进,最终的结果是我选择将 emoji 单独存放并记录数据来源,从根本上对他们进行了区分,不需要判断了。(当然这是针对我自己的业务逻辑)
      由于 emoji 是变长的,我觉得还是反过来判断ASCII字符比较容易,如果包含中文就再加上中文的字符区间好了。

    1. 是的,这个并不能覆盖所有的emoji范围,因为emoji范围本身是演进扩大的,你要根据变化来改这个值的范围,比如说我补充了如下的代码,这几个就不在正文那个范围之内的。
      if (self.range(of: "8️⃣") != nil) {                return true            } else if (self.range(of: "0️⃣") != nil) {                return true            } else if (self.range(of: "6️⃣") != nil) {                return true            }

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注