Ruby中类似于PHP的ucfirst()函数的等效函数是什么?

10

在 Ruby 中(如果涉及到 Rails),最好的方法是什么来使一个字符串的首字母大写?请注意,String#capitalize 不是我想要的,因为除了将字符串的第一个字母大写之外,这个函数还会将所有其他字符变成小写(我不想要 - 我想保留它们不变):

>> "a A".capitalize
=> "A a"
9个回答

17
在Rails中,您可以使用String#titleize方法:

"testing string titleize method".titleize #=> "Testing String Titleize Method"


5
请注意,titleize函数会进行其他更改,例如在CamelCase单词中插入空格。 - cjm

16
您可以使用“sub”来获取您想要的内容(注意:我没有测试过这个多字节字符串)。
"a A".sub(/^(\w)/) {|s| s.capitalize}
(如果您喜欢,当然可以打猴补 String 来添加这个方法)

6

将首字母大写,并保存回字符串中

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

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

3
我建议采用以下解决方案,通过空格实现。
'  ucfirstThis'.sub(/\w/, &:capitalize)
# => "UcfirstThis"

3
如果您不想修改原始字符串,可以按照以下方式操作:
class String
  def ucfirst
    str = self.clone
    str[0] = str[0,1].upcase
    str
  end
end

2

1
如果你正在寻找一个真正类似于 PHP 的 ucfirst() 函数,可以尝试使用
"a A".gsub(/(\w+)/) {|s| s.capitalize}

将会得到 "A A"。

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

这将导致"一种新的方法"。

您可以通过以下方式扩展String类:

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

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

0

看一下这个。

将每个单词的首字母大写

没有内置函数。您需要拆分字母并重新连接,或尝试Rails的String#titleize,并查看它是否符合您的要求。


0

那个一行代码并不依赖于 ActiveSupport。虽然我不确定它是否完全可靠:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接