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
7 réponses
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"
"hello world".titleize
ce qui devrait sortir "Hello World".
Une autre option consiste à utiliser une regex et gsub, qui prend un bloc:
'one TWO three foUR'.gsub(/\w+/, &:capitalize)
Regardez dans la méthode String # capitalize.
Http://www.ruby-doc.org/core-1.9.3/String.html#method-i-capitalize
Si vous essayez de capitaliser la première lettre de chaque mot dans un tableau, vous pouvez simplement mettre ceci:
Array_name.carte(&:capitaliser)