如何在Ruby中替换带重音的拉丁字符?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (35)

我有一个ActiveRecord模型,Foo,它有一个name字段。我希望用户能够按名称搜索,但我希望搜索忽略大小写和任何重音符号。因此,我还存储了一个canonical_name可以搜索的字段:

class Foo
  validates_presence_of :name

  before_validate :set_canonical_name

  private

  def set_canonical_name
    self.canonical_name ||= canonicalize(self.name) if self.name
  end

  def canonicalize(x)
    x.downcase.  # something here
  end
end

我需要填写“someting here”以替换重音字符。

x.downcase.gsub(/[àáâãäå]/,'a').gsub(/æ/,'ae').gsub(/ç/, 'c').gsub(/[èéêë]/,'e')....
提问于
用户回答回答于

Rails已经有了一个用于规范化的内置函数,你只需要用它来规范你的字符串来形成KD,然后移除其他字符(即重音符号),如下所示:

>> "àáâãäå".mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.to_s
=> "aaaaaa"
用户回答回答于

ActiveSupport::Inflector.transliterate (需要Rails 2.2.1+和Ruby 1.9或1.8.7)

例:

>> ActiveSupport::Inflector.transliterate("àáâãäå").to_s => "aaaaaa"

扫码关注云+社区