替换字符但保留大小写

Replace characters but keeping the case

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

我想用普通字符替换特殊字符,但要保持大小写。

示例及其预期输出:

目前,它可以很好地替换,但总是将字符串更改为小写。例如:/IMG_4834.JPG -> /img_4834.jpg

使用I18n#transliterate

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

How do I replace accented Latin characters in Ruby?

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

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