[英]Ruby capitalize every word first letter
我需要将每个单词的第一个字符设为大写,其余字符设为小写...
manufacturer.MFA_BRAND.first.upcase
只设置第一个字母大写,但我需要这个:
ALFA ROMEO => Alfa Romeo
AUDI => Audi
BMW => Bmw
ONETWO THREE FOUR => Onetwo Three Four
在导轨中:
"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"
Rails 的titleize
会将破折号和下划线之titleize
内容转换为空格,并可能产生其他意想不到的结果,尤其是@JamesMcMahon 指出的区分大小写的情况:
"hEy lOok".titleize #=> "H Ey Lo Ok"
因为它是为了处理像骆驼那样的代码:
"kirkDouglas".titleize #=> "Kirk Douglas"
为了应对这种边缘情况下,你可以清理你的字符串#downcase
首先运行#titleize之前。 当然,如果你这样做,你将消除任何驼峰式分词:
"kirkDouglas".downcase.titleize #=> "Kirkdouglas"
试试这个:
puts 'one TWO three foUR'.split.map(&:capitalize).join(' ')
#=> One Two Three Four
要么
puts 'one TWO three foUR'.split.map(&:capitalize)*' '
"hello world".titleize
应该输出“Hello World”。
另一种选择是使用正则表达式和 gsub,它需要一个块:
'one TWO three foUR'.gsub(/\w+/, &:capitalize)
查看 String#capitalize 方法。
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-capitalize
"hello world".split.each{|i| i.capitalize!}.join(' ')
如果您试图将数组中每个单词的第一个字母大写,您可以简单地输入:
array_name.map(&:大写)
我用它来解决类似的问题:
'catherine mc-nulty joséphina'.capitalize.gsub(/(\s+\w)/) { |stuff| stuff.upcase }
这处理了我在尝试以前的答案时看到的以下奇怪情况:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.