1. ホーム
  2. ruby

[解決済み] Rubyで大文字の文字列をタイトルケースに変換する。

2022-02-28 04:07:58

質問

Rubyですべて大文字の文字列を小文字に変換したいのですが、各単語の最初の文字が大文字になるようにしてください。例

convert "MY STRING HERE" to "My String Here".

.downcaseメソッドを使用できることは知っていますが、それだとすべて小文字になってしまいます("my string here")。ファイル内のすべての行をスキャンしてこの変更を行うのですが、これを実現するためにrubyで使用できる正規表現はあるのでしょうか?

ありがとうございます。

解決方法は?

自分なりの方法を考えているうちに(参考までに下記に記載)、かなり厄介なコーナーケースがあることに気がつきました。で提供されている方法を使うのがベターです。 ファセット Rubyで最も素晴らしいライブラリです。

require 'facets/string/titlecase'

class String
  def titleize
    split(/(\W)/).map(&:capitalize).join
  end
end

require 'test/unit'
class TestStringTitlecaseAndTitleize < Test::Unit::TestCase
  def setup
    @str = "i just saw \"twilight: new moon\", and man!   it's crap."
    @res = "I Just Saw \"Twilight: New Moon\", And Man!   It's Crap."
  end
  def test_that_facets_string_titlecase_works
    assert_equal @res, @str.titlecase
  end
  def test_that_my_own_broken_string_titleize_works
    assert_equal @res, @str.titleize # FAIL
  end
end

より一般的なライティングスタイルのガイドラインに近いものが必要な場合 (つまり "and" のような単語を大文字にしない)、GitHub にいくつかの "titleize" gems が存在します。