159 votes

Ruby met la première lettre de chaque mot en majuscule

J'ai besoin de faire des majuscules pour les premiers symboles du mot, et de faire les autres minuscules... Maintenant j'ai ce code :

manufacturer.MFA_BRAND.first.upcase

mais il ne met que la première lettre en majuscule, mais j'en ai besoin, je vais vous expliquer sur l'exemple :

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

274voto

boulder_ruby Points 6257

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 (charger ActiveSupport de rails pour corriger la méthode #titleize en String )

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

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

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

titleize gotchas


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, notamment dans les situations sensibles à la casse, comme l'a souligné @JamesMcMahon :

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

parce qu'il est destiné à gérer le code en majuscules comme :

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

Pour faire face à ce cas limite, vous pouvez nettoyer votre chaîne avec #downcase avant de lancer #titleize. Bien sûr, si vous faites cela, vous effacerez toutes les séparations de mots en majuscules :

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

212voto

Essayez ceci :

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

#=> One Two Three Four

ou

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

20voto

Bob Nadler Points 615

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

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

4voto

Robert 'Jet' Rowe Points 471

Regardez dans la méthode String#capitalize.

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

3voto

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X