Swift 文字列の中に絵文字があるか判定する

Swift Swift
Swift

文字列の中に、絵文字があるか判定する必要があったので、そのやり方を調べたので、メモ。

ネットで調べていると色々と方法が出てくるのですが、どれもしっくりこず・・・
下記のソースコードで自分的には納得いく結果が出ました。
全ての絵文字を調査した訳ではないので、漏れがあるかも・・・?

extension Character {
    var isEmoji: Bool {
        guard let scaler = unicodeScalars.first else { return false }
        return scaler.properties.isEmoji && (scaler.value >= 0x203c || unicodeScalars.count > 1)
    }
}

var name: String

name.contains(where: { $0.isEmoji })

文字をスカラーに変換して、そのpropertiesから、isEmojiという変数でBool値が取得できるようです。

※isEmojiだけでは、数字が絵文字判定されてしまいました。

他にも、「isEmojiModifier」「isEmojiPresentation」などあるのですが、絵文字の中には判定されない絵文字があるようで・・・
「isEmojiModifier」「isEmojiPresentation」これで絵文字判定されなかった絵文字が「isEmoji」だと絵文字判定されているようでした。

「isEmoji」で絵文字が判定されるが、数字も判定されたりするので、上記コードのように書く必要があるっぽい・・・

できれば、この辺の詳しい事を調べたいところです・・・_φ(・_・

コメント

タイトルとURLをコピーしました