Ruby capitaliser chaque mot première lettre

J'ai besoin de faire le premier caractère de chaque mot en majuscules, et faire le reste en minuscules...

manufacturer.MFA_BRAND.first.upcase

Ne définit que la première lettre majuscule, mais j'ai besoin de ceci:

ALFA ROMEO => Alfa Romeo
AUDI => Audi
BMW => Bmw
ONETWO THREE FOUR => Onetwo Three Four
146
demandé sur eebbesen 2012-11-23 01:23:59

7 réponses

Essayez ceci:

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

#=> One Two Three Four

Ou

puts 'one TWO three foUR'.split.map(&:capitalize)*' '
194
répondu 2013-07-31 12:02:14

Dans Rails:

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

Sans Rails:

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

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

Sans Rails (charge ActiveSupport de rails pour patcher la méthode # titleize à String)

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

(certains) cas d'utilisation de chaîne gérés par #titleize

  • "kirk douglas"
  • "kirk_douglas"
  • "kirk douglas"
  • "kirkDouglas"
  • "KirkDouglas"

#titleize pièges

La méthode # titleize est un peu plus complexe que ce à quoi on pourrait s'attendre au départ et peut produire des résultats inattendus résultats, en particulier avec des situations sensibles à la casse comme indiqué par @ JamesMcMahon:

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

Parce qu'il est destiné à gérer le code camel-cased comme:

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

Pour traiter ce cas de bord, vous pouvez nettoyer votre chaîne avec #downcase d'abord avant d'exécuter #titleize. Bien sûr, si vous faites cela, vous effacerez toutes les séparations de mots camelCased:

"kirkDouglas".downcase.titleize #=> "Kirkdouglas"
244
répondu boulder_ruby 2014-06-17 22:54:38

"hello world".titleize ce qui devrait sortir "Hello World".

34
répondu tint lwin lwin win 2015-05-11 06:37:29

Une autre option consiste à utiliser une regex et gsub, qui prend un bloc:

'one TWO three foUR'.gsub(/\w+/, &:capitalize)
18
répondu Bob Nadler 2013-12-16 12:40:06

Regardez dans la méthode String # capitalize.

Http://www.ruby-doc.org/core-1.9.3/String.html#method-i-capitalize

3
répondu Robert 'Jet' Rowe 2012-11-22 21:25:50
"hello world".split.each{|i| i.capitalize!}.join(' ')
3
répondu Muhamamd Awais 2012-11-23 03:45:34

Si vous essayez de capitaliser la première lettre de chaque mot dans un tableau, vous pouvez simplement mettre ceci:

Array_name.carte(&:capitaliser)

0
répondu astee 2017-11-19 10:57:13