web-dev-qa-db-ja.com

RubyすべてのWordの最初の文字を大文字にします

すべてのWordの最初の文字を大文字にし、残りを小文字にする必要があります...

manufacturer.MFA_BRAND.first.upcase

最初の文字を大文字に設定するだけですが、これが必要です:

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

これを試して:

puts 'one TWO three foUR'.split.map(&:capitalize).join(' ')

#=> One Two Three Four

または

puts 'one TWO three foUR'.split.map(&:capitalize)*' '
204
user904990

Railsの場合:

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

railsなし:

"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によって処理される文字列の使用例

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

#落とし穴をタイトルに

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

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

次のようなキャメルケースのコードを処理するためのものです。

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

このEdgeの場合に対処するには、#titleizeを実行する前に、最初に#downcaseで文字列を消去できます。もちろん、それを行うと、キャメルケースされたWordの分離を一掃できます。

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

「Hello World」を出力する"hello world".titleize

37

別のオプションは、ブロックを取る正規表現とgsubを使用することです。

'one TWO three foUR'.gsub(/\w+/, &:capitalize)
18
Bob Nadler

String#capitalizeメソッドを調べます。

http://www.Ruby-doc.org/core-1.9.3/String.html#method-i-capitalize

4
"hello world".split.each{|i| i.capitalize!}.join(' ')
3
Muhamamd Awais

配列内の各Wordの最初の文字を大文字にしようとする場合、単純にこれを置くことができます:

array_name.map(&:capitalize)

0
astee