すべての単語の最初の文字を大文字にし、残りを小文字にする必要があります...
manufacturer.MFA_BRAND.first.upcase
最初の文字を大文字に設定するだけですが、これが必要です。
ALFA ROMEO => Alfa Romeo
AUDI => Audi
BMW => Bmw
ONETWO THREE FOUR => Onetwo Three Four
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なし(#titleizeメソッドにパッチを適用するためのRailsのActiveSupportをロードしますString
)
require 'active_support/core_ext'
"kirk douglas".titleize #=> "Kirk Douglas"
Railstitleize
はダッシュやアンダースコアなどをスペースに変換し、特に@JamesMcMahonが指摘するように、大文字と小文字を区別する状況では、他の予期しない結果を生成する可能性があります。
"hEy lOok".titleize #=> "H Ey Lo Ok"
これは、次のようなキャメルケースのコードを処理することを目的としているためです。
"kirkDouglas".titleize #=> "Kirk Douglas"
このエッジケースに対処するには、#downcase
#titleizeを実行する前に、最初に文字列をクリーンアップします。もちろん、そうすると、キャメルケースの単語の区切りがすべて消去されます。
"kirkDouglas".downcase.titleize #=> "Kirkdouglas"
これを試して:
puts 'one TWO three foUR'.split.map(&:capitalize).join(' ')
#=> One Two Three Four
また
puts 'one TWO three foUR'.split.map(&:capitalize)*' '
"hello world".titleize
「HelloWorld」を出力する必要があります。
別のオプションは、ブロックを取る正規表現とgsubを使用することです。
'one TWO three foUR'.gsub(/\w+/, &:capitalize)
"hello world".split.each{|i| i.capitalize!}.join(' ')
String#capitalizeメソッドを調べます。
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-capitalize
配列内の各単語の最初の文字を大文字にしようとしている場合は、次のように簡単に入力できます。
array_name.map(&:capitalize)
私はこれを同様の問題に使用しました:
'catherine mc-nulty joséphina'.capitalize.gsub(/(\s+\w)/) { |stuff| stuff.upcase }
これは、前の回答を試したときに見た次の奇妙なケースを処理します。