49hack

見習いエンジニアが魔法使いになるまで

絵文字が含まれているかどうかチェックする

本当はmysql側のエンコーディング変更すべきですが、アプリケーション側の応急処置として。

class Post < ActiveRecord::Base
    validate :no_emoji

    # 本文に絵文字を使わないように
    def no_emoji
        if self.content.present?
            emoji_chars = self.content.each_char.select{|c| c.bytes.count >= 4}
            if emoji_chars.size > 0
                errors.add(:content, "に絵文字(#{emoji_chars.join('')})は使用できません。")
            end
        end
    end
end

文字列をeach_charで回して、バイト数が4以上ある文字を検出しています。
シンプルですが、文字量多い場合は大変。。

参考