2009-09-25 6 views
8

Quelle est la meilleure façon de Ruby (avec Rails, le cas échéant) de mettre en majuscule la première lettre d'une chaîne?Equivalent Ruby de la fonction ucfirst() de PHP

Notez que String#capitalize n'est pas ce que je veux car, en plus de mettre la première lettre de la chaîne en majuscule, cette fonction rend tous les autres caractères minuscules (ce que je ne veux pas - je voudrais les laisser intacts) :

>> "a A".capitalize 
=> "A a" 

Répondre

15

Vous pouvez utiliser « sous » pour obtenir ce que vous voulez (note: Je n'ai pas testé avec des chaînes multi-octets)

"a A".sub(/^(\w)/) {|s| s.capitalize} 

(et vous pouvez bien sûr monkey-patch chaîne pour ajouter ceci comme méthode si vous)

0

Jetez un oeil à cela.

capitalizing-first-letter-of-each-word

Il n'y a pas une fonction intégrée. Vous devez diviser les lettres et rejoindre ou essayer Rails 'String # titleize et voir s'il fait ce que vous voulez.

14

Dans Rails vous avez la méthode String#titleize:

"chaîne de test méthode titleize" .titleize # => "test chaîne Titleize méthode"

+3

Be conscient que 'ti tleize' apporte d'autres modifications, telles que l'insertion d'un espace dans les mots [CamelCase] ​​(https://en.wikipedia.org/wiki/CamelCase). – cjm

6

Majuscules le premier char, et enregistrez-le dans la chaîne

s = "a A" 
s[0] = s[0,1].upcase 
p s # => "A A" 

Ou,

class String 
    def ucfirst! 
    self[0] = self[0,1].upcase 
    self 
    end 
end 
3

Si vous ne voulez pas modifier la chaîne d'origine, vous pouvez le faire de cette façon:

class String 
    def ucfirst 
    str = self.clone 
    str[0] = str[0,1].upcase 
    str 
    end 
end 
1

Si vous êtes à la recherche d'une véritable fonction similaire à phps ucfirst() essayer

"a A".gsub(/(\w+)/) {|s| s.capitalize} 

se traduira par "A A".

"a neW APPROACH".gsub(/(\w+)/) {|s| s.capitalize} 

se traduira par "A New Approach".

Vous pouvez étendre la classe String avec:

class String 
    def ucfirst 
    self.gsub(/(\w+)/) { |s| s.capitalize } 
    end 

    def ucfirst! 
    self.gsub!(/(\w+)/) { |s| s.capitalize } 
    end 
end 
0

Je propose la solution suivante, les travaux à travers des espaces

' ucfirstThis'.sub(/\w/, &:capitalize) 
# => "UcfirstThis"