【问题标题】:How to create a validation in Rails that checks if a string contains only emoji characters?如何在 Rails 中创建一个验证来检查字符串是否仅包含表情符号字符?
【发布时间】:2015-10-07 14:28:26
【问题描述】:

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

【问题讨论】:

  • 您是指表情符号,例如 Google 和 Facebook 使用的表情符号,还是表情符号(纯文本笑脸)?
  • @HunterStevens 嘿!表情符号是指 Unicode 的。
  • 请编辑问题和标题以澄清这一点。下面的真棒答案假设您的意思是表情符号。
  • @HunterStevens,谢谢!我已经更新了问题。

标签: ruby-on-rails validation


【解决方案1】:

匹配一套全面的表情符号很困难。您可以使用一组正则表达式来查找“类似表情符号”的东西,您可以在某处用特殊字符标记所有表情符号作为开始/结束,或者您可以列出所有可能的表情符号并与之匹配。您可能想使用某种正则表达式。

如果要使用正则表达式,可以使用活动记录“匹配”

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 次或多次的正则表达式。所以这将匹配一个特殊信号,您的代码将包装它所知道的表情符号,您以后可以使用它来识别表情符号。有比 emoji 更好的词,但 endemoji。我最喜欢的是 ascii 7,打字机铃声的字符!

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

【讨论】:

  • 我建议包括搜索 unicode 字符,以防 OP 意味着像图片一样的表情符号,而不仅仅是纯文本微笑。
  • 请看this comment
  • 嘿,@JohnKulp,感谢您的全面回答!我正在寻找一种匹配 Unicode 表情符号的模式,您对此有什么想法吗?
  • @dan 你可以使用非常相似的方法。您不是匹配特定的单词或列表,而是查找字符的 unicode 值并将其与 unicode 中的表情符号范围进行匹配。这个网站有他们的完整列表:unicode.org/emoji/charts/full-emoji-list.html
  • @dan,您可以使用的具体语法是:(string.ord >= 0x1F600 and string.ord
猜你喜欢
  • 1970-01-01
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 2017-12-16
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多