如何在Rails中创建验证,检查字符串是否只包含表情符号字符?

时间:2015-07-17 19:11:49

标签: ruby-on-rails validation

我需要检查给定字符串是否仅使用Unicode emojis()。什么是可能的解决方案?

1 个答案:

答案 0 :(得分:3)

匹配一套全面的表情符号很难。您可以使用一组正则表达式来查找类似表情符号的'事情,你可以在某个地方用开头/结尾的特殊字符标记所有表情符号,或者你可以列出所有可能的表情符号并与之匹配。你可能想要使用某种正则表达式。

如果您想使用正则表达式,可以使用活动记录"匹配"

class Emoji < ActiveRecord::Base
  validates :something, format: { with: /[:;][\)3\/|\(]/,
    message: "only allows emojis" }
end

我可能已经逃过了那些ruby并不需要逃避的东西,但是你明白了。该正则表达式将匹配:;中的一个,然后匹配)(/|中的一个做个鬼脸。然而,许多表情符号可能更复杂。下一个示例将字符串与listOfEmoji中的有效表情符号列表进行比较。它使用包含验证器。

class Emoji < ActiveRecord::Base
  validates :something, inclusion: { in: listOfEmoji,
    message: "%{value} is not in the list of valid emoji" }
end

最后,您可能会逃避在您识别为表情符号的代码中较早的任何内容的开头和结尾。您必须使用不会包含在实际表情符号中的内容来执行此操作,然后将其作为正则表达式进行匹配。例如,如果您将:)替换为emoji:)endemoji,则可以使用这样的正则表达式对其进行验证:

class Emoji < ActiveRecord::Base
  validates :something, format: { with: /emoji.+endemoji/,
    message: "only allows emojis" }
end

.+是(任何字符)的正则表达式1次或更多次。所以这将匹配一个特殊的信号,你的代码将包装它所知道的表情符号,你可以在以后使用它来识别表情符号。尽管如此,还有比表情符号更好的词语。我最喜欢的是ascii 7,打字机铃声的角色!

所有这些都是可能性,最佳答案很大程度上取决于您希望如何构建代码以及您尝试做什么。