web-dev-qa-db-fra.com

Ruby capitalise chaque première lettre de Word

Je dois mettre le premier caractère de chaque mot en majuscule et le reste en minuscule ...

manufacturer.MFA_BRAND.first.upcase

met uniquement la première lettre en majuscule, mais j’ai besoin de ceci:

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

essaye ça:

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

#=> One Two Three Four

ou

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

Dans les 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 (chargez ActiveSupport de Rails dans le correctif pour la méthode #titleize à String)

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

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

  • "kirk douglas"
  • "kirk_douglas"
  • "kirk-douglas"
  • "KirkDouglas"
  • "KirkDouglas"

#titleize gotchas

La méthode #titleize est un peu plus complexe que prévu et peut produire des résultats inattendus, en particulier dans des situations sensibles à la casse, comme l'a souligné @JamesMcMahon:

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

car il est destiné à gérer le code camel casé comme:

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

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

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

"hello world".titleize qui devrait générer "Hello World".

36

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

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

Regardez dans la méthode String # capitalize.

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

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

Si vous essayez de mettre en majuscule la première lettre de chaque mot d'un tableau, vous pouvez simplement dire ceci: 

array_name.map (&: capitalize)

0
astee