61 votes

La conversion en majuscule chaîne dans le titre de cas à l'aide de Ruby

Je suis en train de convertir une majuscules chaîne de Rubis dans un cas inférieur à un, mais à chaque mot du premier caractère en majuscule. Exemple:

convertir "MA CHAÎNE ICI" à "Ma Chaîne Ici".

Je sais que je peux utiliser le .downcase méthode, mais qui rend le tout en minuscules ("ma chaîne ici"). Je suis la numérisation de toutes les lignes dans un fichier et de faire ce changement, donc, il y a une expression régulière je peux l'utiliser par le biais de ruby pour y parvenir?

Merci!

105voto

James A. Rosen Points 25774

Si vous êtes à l'aide de Rails (vraiment tout ce que vous avez besoin est ActiveSupport, qui fait partie de Rails), vous pouvez utiliser titleize:

"MY STRING HERE".titleize
# => "My String Here"

63voto

sepp2k Points 157757
"HELLO WORLD HOW ARE YOU".gsub(/\w+/) do |word|
  word.capitalize
end
#=> "Hello World How Are You"

37voto

Jörg W Mittag Points 153275

Tout en essayant de venir avec ma propre méthode (inclus ci-dessous pour référence), j'ai réalisé qu'il y a une jolie coquine au coin des cas. Mieux de tout simplement utiliser la méthode déjà à Facettes, le mostest awesomest Ruby bibliothèque evar:

require 'facets/string/titlecase'

class String
  def titleize
    split(/(\W)/).map(&:capitalize).join
  end
end

require 'test/unit'
class TestStringTitlecaseAndTitleize < Test::Unit::TestCase
  def setup
    @str = "i just saw \"twilight: new moon\", and man!   it's crap."
    @res = "I Just Saw \"Twilight: New Moon\", And Man!   It's Crap."
  end
  def test_that_facets_string_titlecase_works
    assert_equal @res, @str.titlecase
  end
  def test_that_my_own_broken_string_titleize_works
    assert_equal @res, @str.titleize # FAIL
  end
end

Si vous voulez quelque chose de plus près, conforme à la typique du style de rédaction des lignes directrices (c'est à dire ne pas tirer profit des mots comme "et"), il y a un couple de "titleize" gemmes sur GitHub.

9voto

Simone Carletti Points 77653

De ActiveSupport

"MY STRING HERE".gsub(/\b('?[a-z])/) { $1.capitalize }

Si vous êtes à l'aide de Rails/ActiveSupport, la méthode est déjà disponible gratuitement.

5voto

bantic Points 2417
string = "MY STRING HERE"
string.split(" ").map {|word| word.capitalize}.join(" ")

La façon dont cela fonctionne: L' .split(" ") le divise sur des espaces, alors maintenant, nous avons un tableau qui ressemble ["my", "string", "here"]. L' map appel itère sur chaque élément du tableau, de l'affecter à la variable temporaire word, nous appelons alors capitalize sur. Maintenant, nous avons un tableau qui ressemble ["My", "String", "Here"], et enfin nous nous tournons tableau en une chaîne de caractères en joining chaque élément avec un espace (" ").

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