Ruby on rails Fixnum,大写需要一个字符串。。所以我认为title.first.capitalize才是正确的选择。可惜你不能title.first.capitalize大写将第一个字母后的所有字母转换为小写,因此它对问题中出现的字符串(“我来自纽约”)不起作用。O

Ruby on rails Fixnum,大写需要一个字符串。。所以我认为title.first.capitalize才是正确的选择。可惜你不能title.first.capitalize大写将第一个字母后的所有字母转换为小写,因此它对问题中出现的字符串(“我来自纽约”)不起作用。O,ruby-on-rails,string,capitalization,Ruby On Rails,String,Capitalization,Fixnum,大写需要一个字符串。。所以我认为title.first.capitalize才是正确的选择。可惜你不能title.first.capitalize大写将第一个字母后的所有字母转换为小写,因此它对问题中出现的字符串(“我来自纽约”)不起作用。OP特别想避免“纽约”嗯,事实上,我的答案有点太快了。@Bartuzz尽管这不是OP想要的,但这正是我想要的。谢谢然而,纽约将是一个不符合语法的专有名词,应该使用大写。请注意,personalize是Rails,确切地说是ActiveSuppor



Fixnum,大写需要一个字符串。。所以我认为title.first.capitalize才是正确的选择。可惜你不能
title.first.capitalize
大写
将第一个字母后的所有字母转换为小写,因此它对问题中出现的字符串(“我来自纽约”)不起作用。OP特别想避免“纽约”嗯,事实上,我的答案有点太快了。@Bartuzz尽管这不是OP想要的,但这正是我想要的。谢谢然而,纽约将是一个不符合语法的专有名词,应该使用大写。请注意,
personalize
是Rails,确切地说是ActiveSupport方法。普通ruby不能做到这一点。至少有人编写了优雅的解决方案,扩展了
String
类。@Dmitry为什么monkey对String类进行了优雅的修补?它做了很多额外的事情,比如单数化单词<代码>“你好世界”。如果我的字符串为空,则分类#=>“你好世界”不会失败!美好的这就是我需要的。简洁优雅。我相信这应该是最好的答案,我同意。我认为这应该是公认的答案。一个怪癖是因为
^
意味着行的开头,
“\nfoo”
变成了
“\nfoo”
。对于大多数用例来说,这可能很好。由于它是一个
sub
而不是
gsub
,因此即使使用多行字符串,它仍然只能将一个字母大写。可以通过使用
str.sub(/\s/,&:upcase)
,找到第一个非空白字符并将其大写。这是个好消息!我在想我们现在能做些什么,也许Rails 4的polyfill会很好。请注意,upcase_首先处理重音/特殊字符,即使是mb_字符
def fixlistname!
  self.title = self.title.lstrip + (title.ends_with?("...") ? "" : "...")
  self.title[0] = self.title[0].capitalize
  errors.add_to_base("Title must start with \"You know you...\"") unless self.title.starts_with? 'You know you'
end
def fixlistname!
  self.title = self.title.lstrip + (title.ends_with?("...") ? "" : "...")
  self.title.slice(0,1).capitalize + self.title.slice(1..-1)
  errors.add_to_base("Title must start with \"You know you...\"") unless self.title.starts_with?  'You know you'
end
def fixlistname!
  self.title = title.lstrip
  self.title += '...' unless title.ends_with?('...')
  self.title[0] = title[0].capitalize
  errors.add_to_base('Title must start with "You know you..."') unless title.starts_with?("You know you")
end
self.title[0] = title[0].to_s.capitalize
string = "i'm from New York"
string.split(/\s+/).each{ |word,i| word.capitalize! unless i > 0 }.join(' ')
# => I'm from New York
#!/usr/bin/ruby
def fixlistname(title)
  title = title.lstrip
  title += '...' unless title =~ /\.{3}$/
  title[0] = title[0].capitalize
  raise 'Title must start with "You know you..."' unless title =~ /^You know you/
  title
end

DATA.each do |title|
  puts fixlistname(title)
end

__END__
you know you something WITH dots ...
you know you something WITHOUT the dots
  you know you something with LEADING whitespace...
  you know you something with whitespace BUT NO DOTS
this generates error because it doesn't start with you know you
You know you something WITH dots ...
You know you something WITHOUT the dots...
You know you something with LEADING whitespace...
You know you something with whitespace BUT NO DOTS...
RuntimeError: Title must start with "You know you..."
def fixlistname!
  self.title = title.lstrip
  self.title += '...' unless title.ends_with?('...')
  self.title[0] = title[0].capitalize
  errors.add_to_base('Title must start with "You know you..."') unless title.starts_with?("You know you")
end
s = "i'm from New York"
s[0] = s[0].capitalize
#=> I'm from New York
"hello".capitalize    #=> "Hello"
"HELLO".capitalize    #=> "Hello"
"123ABC".capitalize   #=> "123abc"
new_string = string.slice(0,1).capitalize + string.slice(1..-1)
irb(main):001:0> string = "i'm from New York..."
=> "i'm from New York..."
irb(main):002:0> new_string = string.slice(0,1).capitalize + string.slice(1..-1)
=> "I'm from New York..."
title = "test test"     
title[0] = title[0].capitalize
puts title # "Test test"
s = "i'm from New York..."
s[0] = s.capitalize[0]
s = s.mb_chars
s[0] = s.first.upcase
s.to_s
string.gsub(/^([a-z])/) { $1.capitalize }
 > 'caps lock must go'.gsub(/^(.)/) { $1.capitalize }
=> "Caps lock must go"
"i'm from New_York...".humanize
"I'm from new york..."
class String
  def capitalize_first_char
    self.sub(/^(.)/) { $1.capitalize }
  end
end
"i'm from New York".capitalize_first_char
'test'.dup.tap { |string| string[0] = string[0].upcase }
str = "this is a Test"
str.sub(/^./, &:upcase)
# => "This is a Test"
s = "test string"
s[0] = s[0].upcase
# => "Test string"
'somESTRIng'.classify
#rails => 'SomESTRIng'
class String
  # Only capitalize first letter of a string
  def capitalize_first
    self.sub(/\S/, &:upcase)
  end
end
"i live in New York".capitalize_first #=> I live in New York
str.sub(/./, &:capitalize)
"i'm from New York...".upcase_first
"I'm from New York..."