2009-09-25 9 views
8

¿Cuál es la mejor forma en Ruby (con Rails, si corresponde) para escribir en mayúscula la primera letra de una cadena?Ruby equivalente a la función ucfirst() de PHP

Tenga en cuenta que String#capitalize no es lo que quiero ya que, además de escribir en mayúscula la primera letra de la cadena, esta función hace que todos los demás caracteres sean minúsculos (lo cual no quiero, me gustaría dejarlos intactos) :

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

Respuesta

15

Puede utilizar "sub" para conseguir lo que quiere (nota: no he probado esto con cadenas multibyte)

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

(y puede, por supuesto Cadena monkeypatch añadir esto como un método si le gustaría)

0

Echa un vistazo a esto.

capitalizing-first-letter-of-each-word

No hay una función incorporada. Debes dividir las letras y volver a unir o probar Rails 'String # titleize y ver si hace lo que quieres.

14

En los carriles que tienen la String#titleize método:

"método titleize sarta de pruebas"

.titleize # => "las pruebas de cuerdas titleize método"

+3

Sea consciente de que 'ti tleize' realiza otros cambios, como insertar un espacio en las palabras [CamelCase] ​​(https://en.wikipedia.org/wiki/CamelCase). – cjm

6

mayúsculas el primer carácter, y guardarla de nuevo en la cadena

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

O

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

Si no desea modificar la cadena original, puede hacerlo de esta manera:

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

Si usted está buscando una verdadera función similar a los PHP ucfirst() tratar

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

dará como resultado "A A".

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

dará como resultado "A New Approach".

Puede extender clase String con:

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

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

propongo la siguiente solución, funciona a través de un espacio en blanco

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