Ruby相当于PHP的ucfirst()函数

Ruby中最好的方法是什么(使用Rails,如果相关的话)来大写字符串的第一个字母?

注意String#capitalize不是我想要的,因为除了大写字符串的第一个字母之外,这个函数还使所有其他字符小写(我不想要它 – 我想保持它们不受影响):

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

你可以使用“sub”来获得你想要的东西(注意:我没有用多字节字符串测试它)

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

(你当然可以将monkeypatch String添加为方法,如果你愿意的话)

在Rails中你有String#titleize方法:

“测试字符串标题化方法”.titleize#=>“测试字符串标题化方法”

大写第一个char,并将其保存回字符串

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

要么,

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

如果您不想修改原始字符串,可以这样做:

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

如果你正在寻找一个真正类似PHP的functionucfirst()尝试

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

将导致“ AA ”。

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

将导致“ A New Approach ”。

您可以使用以下命令扩展String类:

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

我提出以下解决方案,通过空白工作

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

看看这个。

资本先通知书每个字

没有内置function。 您需要拆分字母并重新加入或尝试Rails的String#titleize并查看它是否符合您的要求。

那个衬垫不依赖于ActiveSupport。 不确定它是完全防弹的:

 "my great uncle and grand-ma".gsub(/(\A\w|\s\w)/) { |m| m.upcase } # My Great Uncle And Grand-ma