カテゴリー: iOS

Swiftで絵文字を判定する方法

はじめに

こんにちは、nukkyです。
今回はアプリでの文字入力の際に
入力された文字が絵文字かどうかの判定方法に
結構手間取ったので、備忘録がてら紹介しようと思います。

実装

絵文字の判定

まずは判定の処理を紹介します。
簡単に使用できるようStringにextensionしました。

fileprivate var appleColorEmojiFont = CTFontCreateWithName("AppleColorEmoji" as CFString, 20, nil)

extension String {
    //絵文字チェック
    var isAppleColorEmoji: Bool {
        let chars = Array(self.utf16)
        if chars.count == 1 && chars[0] <= 57 { // 制御文字やスペース、数字を除外
            return false
        }
        var glyphs = [CGGlyph](repeating: 0, count: chars.count)
        return CTFontGetGlyphsForCharacters(appleColorEmojiFont, chars, &glyphs, glyphs.count)
    }
}

UITextFieldで絵文字の排除

では、実際絵文字の判定処理を使用して
UITextFieldで絵文字の入力チェックを行い
絵文字を表示させないようにしてみます。

class EmojiExclusionTextField: UITextField, UITextFieldDelegate {
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        delegate = self
    }
    
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        //キーボードを閉じる
        textField.resignFirstResponder()
        return true
    }
    
    //文字入力チェック
    func textDidChange() {
        textEmojiExclusion()
    }
    
    //TextFieldの文字列から絵文字を除外する
    final func textEmojiExclusion() {
        let checkStr: String = self.text!
        var replaceText = ""
        var isExclusion = false
        for ch in checkStr.characters {
            let str: String = ch.description
            if str.isAppleColorEmoji {
                isExclusion = true
            } else {
                replaceText += str
            }
        }
        if isExclusion {
            self.text = replaceText
        }
    }
}

UITextFieldDelegateのtextDidChangeにて
判定処理を行い、コピペにも対応するようにしてます。

 

さいごに

以上、Swiftでの絵文字判定処理でした。
もし、絵文字の判定に困っている方がいれば、
お役に立てればうれしいです。

nukky

シェア
執筆者:
nukky
タグ: Swift

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

2週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

4週間 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前