Valós kisbetű-nagybetű váltás Ruby nyelvben

Ékezetes karaktereknél a .upcase és társai hibáznak. Javítsuk ki!

Márc. 27

Ha ruby nyelven programozunk, és nem csak színtiszta angol szövegeket tárolunk String típusú változóban, hanem ékezetes karaktereket is, akkor a kisbetű-nagybetű konverziót végző parancsok sajnos hibásan működnek. A probléma megoldásához az Activesupport::Multibyte-ra lesz szükségünk.

Próbálkozzunk először az interaktív rubyban:

irb(main):001:0> a="árvíztűrő tükörfúrógép"
=> "árvíztűrő tükörfúrógép"
irb(main):002:0> a.upcase
=> "áRVíZTűRő TüKöRFúRóGéP"
irb(main):003:0> require 'active_support/core_ext/string'
=> true
irb(main):004:0> a.mb_chars.upcase.to_s
=> "ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP"

A kényelmes használathoz definiáljuk újra a String osztály megfelelő függvényeit:

require 'active_support/core_ext/string'

class Srting
  def upcase
    self.mb_chars.upcase.to_s
  end
  def capitalize
    self.mb_chars.capitalize.to_s
  end
end

Következő bejegyzés Előző bejegyzés