2016-04-11 27 views
1
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

+0

興味深い関連情報:http://stackoverflow.com/questions/4418196/ruby-unicode-question – user12341234

+0

。上記のページで詳しくはhttp://stackoverflow.com/a/4418681/128421をご覧ください。この方法でファイルの名前を変更すると、滑りやすい斜面になり、Unicode範囲で文字を取得することができれば、狭い置換セットは残りの文字をカバーしません。ルールに従って名前のないファイルを受け入れることを拒否するか、そのまま受け入れて名前を変更しません。 –

答えて

6

を参照してください - #downcaseを削除するとこれを修正する必要があります。その後、外部ライブラリに依存することなく、あなたにも、大文字をカバーするために、既存の方法を変更することができます。

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

使用I18n#transliterate

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

は、それが#trを呼び出す前に#downcaseを呼び出しているので、あなたの方法の現在の実装では、常に小文字の文字列を返しているHow do I replace accented Latin characters in Ruby?

関連する問題