Ruby 把每个单词的第一个字母大写

我需要把每个单词的第一个字母大写,其余的小写..。

manufacturer.MFA_BRAND.first.upcase

只是把第一个字母设成大写,但我需要这个:

ALFA ROMEO => Alfa Romeo
AUDI => Audi
BMW => Bmw
ONETWO THREE FOUR => Onetwo Three Four
121328 次浏览

试试这个:

puts 'one TWO three foUR'.split.map(&:capitalize).join(' ')


#=> One Two Three Four

或者

puts 'one TWO three foUR'.split.map(&:capitalize)*' '
"hello world".split.each{|i| i.capitalize!}.join(' ')

在 Rails:

"kirk douglas".titleize => "Kirk Douglas"
#this also works for 'kirk_douglas'

铁路:

"kirk douglas".split(/ |\_/).map(&:capitalize).join(" ")


#OBJECT IT OUT
def titleize(str)
str.split(/ |\_/).map(&:capitalize).join(" ")
end


#OR MONKEY PATCH IT
class String
def titleize
self.split(/ |\_/).map(&:capitalize).join(" ")
end
end

W/o Rails (加载 Rails 的 ActiveSupport 以将 # titleize 方法修补到 String)

require 'active_support/core_ext'
"kirk douglas".titleize #=> "Kirk Douglas"

(有些)字符串用例由 # titleize 处理

  • “ Kirk Douglas”
  • “ Kirk _ Douglas”
  • “ Kirk-Douglas”
  • 柯克 · 道格拉斯
  • 柯克 · 道格拉斯

# 给陷阱贴上标签

Rails 的 titleize可以将破折号和下划线之类的东西转换成空格,还可以产生其他意想不到的结果,特别是在大小写敏感的情况下,正如@JamesMcMahon 所指出的:

"hEy lOok".titleize #=> "H Ey Lo Ok"

因为它是用来处理驼峰大小写代码的,比如:

"kirkDouglas".titleize #=> "Kirk Douglas"

要处理这种边缘情况,可以在运行 # titleize 之前先用 #downcase清理字符串。当然,如果你这样做,你会消除任何骆驼大小写的单词分离:

"kirkDouglas".downcase.titleize #=> "Kirkdouglas"

另一种选择是使用正则表达式和 gsub,它采用一个块:

'one TWO three foUR'.gsub(/\w+/, &:capitalize)

"hello world".titleize应该输出“ Hello World”。

如果你想把数组中每个单词的第一个字母大写,你可以简单地这样写:

Array _ name. map (& : 大写)

我用它来解决一个类似的问题:

'catherine mc-nulty joséphina'.capitalize.gsub(/(\s+\w)/) { |stuff| stuff.upcase }

这个程序可以处理下面这些奇怪的案例,我见过这些案例尝试以前的答案:

  • 非单词字符,如-
  • 在像 é 这样的名字中常见的带重音的字符
  • 字符串中间的大写字符