string – Ruby capitalize every word first letter

string – Ruby capitalize every word first letter

In Rails:

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

w/o 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

w/o Rails (load railss ActiveSupport to patch #titleize method to String)

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

(some) string use cases handled by #titleize

  • kirk douglas
  • kirk_douglas
  • kirk-douglas
  • kirkDouglas
  • KirkDouglas

#titleize gotchas

Railss titleize will convert things like dashes and underscores into spaces and can produce other unexpected results, especially with case-sensitive situations as pointed out by @JamesMcMahon:

hEy lOok.titleize #=> H Ey Lo Ok

because it is meant to handle camel-cased code like:

kirkDouglas.titleize #=> Kirk Douglas

To deal with this edge case you could clean your string with #downcase first before running #titleize. Of course if you do that you will wipe out any camelCased word separations:

kirkDouglas.downcase.titleize #=> Kirkdouglas

try this:

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

#=> One Two Three Four

or

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

string – Ruby capitalize every word first letter

hello world.titleize which should output Hello World.

Leave a Reply

Your email address will not be published.