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

Normal karakterler için özel karakterleri değiştirmek istiyorum, ancak durumu koru.Karakterleri değiştirin ancak küçük harflerle işaretleyin Durum

örnekleri ve bunların tahmini sonuçları:

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

Şu anda, iyi bir şekilde değiştiriliyor, ancak her zaman dizeyi küçük harfe dönüştürüyor. Ör: /IMG_4834.JPG -> /img_4834.jpg

+0

İlginç ilgili bilgileri: http://stackoverflow.com/questions/4418196/ruby-unicode-question – user12341234

+0

. ..özel olarak http://stackoverflow.com/a/4418681/128421 yukarıdaki sayfada. Dosyaların bu şekilde yeniden adlandırılması kaygan bir eğimdir ve eğer Unicode aralığındaki karakterleri elde etmek mümkün ise, dar bir yedek set cevapsız karakterlerin geri kalanını kapsamaz. Kurallara göre adlandırılmamış dosyaları kabul etmeyi reddeder ya da oldukları gibi kabul eder ve onları yeniden adlandırmaz. –

cevap

6

öğrenin - #downcase'un kaldırılması bu sorunu gidermelidir. Ardından, dış kütüphaneleri bağlı kalmadan, siz de küçük karakterlere kapsayacak şekilde mevcut yöntemini değiştirebilirsiniz:

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

Kullanım I18n#transliterate

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

o #tr çağırmadan önce #downcase aradığını çünkü yönteminin şu anki uygulama her zaman küçük harflerden dizeleri dönüyor How do I replace accented Latin characters in Ruby?

İlgili konular