替换字符但保留案例

时间:2016-04-11 16:24:01

标签: ruby translate

def replace_characters(name)
    name.downcase.tr('àáäâãèéëẽêìíïîĩòóöôõùúüûũñç ', 'aaaaaeeeeeiiiiiooooouuuuunc-')
end

我想替换正常字符的特殊字符,但保留大小写。

示例及其预期产出:

  • íhávéspécialchárs.jpg// ihavespecialchars.jpg
  • ÍHÁVÉSPÉCIALCHÁRS.JPG// IHAVESPECIALCHARS.JPG
  • /IMG_4834.JPG // /IMG_4834.JPG

目前,它正在替换正常,但始终将字符串更改为小写。例如:/ IMG_4834.JPG - > /img_4834.jpg

2 个答案:

答案 0 :(得分:6)

您的方法的当前实现始终返回小写字符串,因为它在调用#downcase之前调用#tr - 删除#downcase应该可以解决此问题。然后,不依赖于外部库,您可以修改现有方法以覆盖大写字符:

def replace_characters(name)
  name.tr('àáäâãèéëẽêìíïîĩòóöôõùúüûũñçÀÁÄÂÃÈÉËẼÊÌÍÏÎĨÒÓÖÔÕÙÚÜÛŨÑÇ ',
          'aaaaaeeeeeiiiiiooooouuuuuncAAAAAEEEEEIIIIIOOOOOUUUUUNC-')
end

答案 1 :(得分:3)

使用I18n#transliterate

irb(main):004:0> I18n.transliterate("àáäâãèéëẽêìíïîĩòóöôõùúüûũñç")
=> "aaaaaeee?eiiiiiooooouuuuunc"

请参阅How do I replace accented Latin characters in Ruby?