Ruby はすべての単語の最初の文字を大文字にします 質問する

Ruby はすべての単語の最初の文字を大文字にします 質問する

各単語の最初の文字を大文字にし、残りを小文字にする必要があります...

manufacturer.MFA_BRAND.first.upcase

最初の文字だけを大文字に設定していますが、次のものが必要です:

ALFA ROMEO => Alfa Romeo
AUDI => Audi
BMW => Bmw
ONETWO THREE FOUR => Onetwo Three Four

ベストアンサー1

Railsの場合:

"kirk douglas".titleize => "Kirk Douglas"
#this also works for 'kirk_douglas'

レールなし:

"kirk douglas".split(/ |\_/).map(&:capitalize).join(" ")

#OBJECT IT OUT
def titleize(str)
  str.split(/ |\_/).map(&:capitalize).join(" ")
end

#OR MONKEY PATCH IT
class String  
  def titleize
    self.split(/ |\_/).map(&:capitalize).join(" ")
  end
end

Railsなし(RailsのActiveSupportをロードして#titleizeメソッドにパッチを当てるString

require 'active_support/core_ext'
"kirk douglas".titleize #=> "Kirk Douglas"

#titleize によって処理される (一部の) 文字列の使用例

  • 「カーク・ダグラス」
  • 「カーク・ダグラス」
  • 「カーク・ダグラス」
  • 「カーク・ダグラス」
  • 「カーク・ダグラス」

#titleize の落とし穴

Rails はtitleizeダッシュやアンダースコアなどをスペースに変換し、@JamesMcMahon が指摘したように、特に大文字と小文字を区別する状況では予期しない結果が生じる可能性があります。

"hEy lOok".titleize #=> "H Ey Lo Ok"

これは次のようなキャメルケースのコードを処理することを意図しているためです。

"kirkDouglas".titleize #=> "Kirk Douglas"

この特殊なケースに対処するには、#titleize を実行する前に、まず文字列をクリーンアップします#downcase。もちろん、これを行うと、キャメルケースの単語の区切りがすべて消去されます。

"kirkDouglas".downcase.titleize #=> "Kirkdouglas"

おすすめ記事