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

更新:網絡上流傳的 emoji 代碼點不太完整,我按照維基百科的資料重新整理了一下,文中的 Swift 版本代碼已更新。


很多時候我們需要判斷一個字符、或者說是一句話裡是不是包含了emoji,使用 Swift 語言開發 app 也不例外,比如可以使用正則表達式——但很遺憾,似乎不同的語言對於正則表達式的支持區別, \u 這個功能不是到哪都好使的,所以最簡單粗暴的辦法,我們弄一個字符串,它包含了所有可能會用到的 emoji,然後去檢索它:

其實吧,說句良心哈,效率還不錯……當然了,這樣的結果就是你的列表得時常更新——同時你還得忍受 Xcode 卡得一逼的狀態。

使用遍歷

所以,網上有一個用 OC 實現的擴展,似乎流傳很廣:

其實它的原理還是去匹配 Emoji 所在區間,所以,如果我們應用上 Swift 語句以及其特性,那麼 Swift 版本就是這樣:

?是不是很簡潔?

代碼來自:檢查斯威夫特字符串包含的表情符號或白帶系統字符

本文由 落格博客 原創撰寫:落格博客 » Swift 中判斷字符串是否有 Emoji 表情

轉載請保留出處和原文鏈接:https://www.logcg.com/archives/2504.html

關於作者

R0uter

如非聲明,本人所著文章均為原創手打,轉載請註明本頁面鏈接和我的名字。

註釋

    1. 用正則原理也是一樣,匹配emoji區間範圍,可以用正則啊。只是寫這篇文章的時候我沒想到可以用正則,我對這個也不熟練罷了。
      不過由於emoji一直在演進,最終的結果是我選擇將 emoji 單獨存放並記錄數據來源,從根本上對他們進行了區分,不需要判斷了。(當然這是針對我自己的業務邏輯)
      由於 emoji 是變長的,我覺得還是反過來判斷ASCII字符比較容易,如果包含中文就再加上中文的字符區間好了。

    1. 是的,這個並不能覆蓋所有的emoji範圍,因為emoji範圍本身是演進擴大的,你要根據變化來改這個值的範圍,比如說我補充瞭如下的代碼,這幾個就不在正文那個範圍之內的。
      如果 (.範圍(: "8️⃣") != ) {                返回 true            } 其他 如果 (.範圍(: "0️⃣") != ) {                返回 true            } 其他 如果 (.範圍(: "6️⃣") != ) {                返回 true            }

發表評論

您的電子郵件地址不會被公開. 必填字段標 *