16

如何在 Ruby on Rails 中将字符串中每个世界的第一个字母大写:

"goyette-xyz-is wide road".titleize returns "Goyette Xyz Is Wide Road".

我想要这样的输出:

"goyette-xyz is wide road".SOME-FUNCTION should return "Goyette-xyz-is Wide Road".

titleize 删除了下划线和连字符,但我想将其保留在字符串中。

4

4 回答 4

46

你可以.titleize 像这样使用"i want to make the first letter of each work into a cap".titleize

您可以从 apidocks中了解有关titleize的更多信息

标题化(字)公开

将所有单词大写并替换字符串中的一些字符以创建一个更好看的标题。titleize 用于创建漂亮的输出。它不用于 Rails 内部。

titleize 也别名为 titlecase。

例子:

"man from the boondocks".titleize   # => "Man From The Boondocks"
"x-men: the last stand".titleize    # => "X Men: The Last Stand"
"TheManWithoutAPast".titleize       # => "The Man Without A Past"
"raiders_of_the_lost_ark".titleize  # => "Raiders Of The Lost Ark"

这种现实是如何运作的

# File activesupport/lib/active_support/inflector/methods.rb, line 115
def titleize(word)
  humanize(underscore(word)).gsub(/\b('?[a-z])/) { $1.capitalize }
end

为了在工作中实际保留“-”,我们可以像这样向字符串类添加一个新方法。

# ./lib/core_ext/string.rb
class String
  #"goyette-xyz-is wide road".titleize_with_dashes#=> "Goyette-xyz-is Wide Road"
  def titleize_with_dashes
    humanize.gsub(/\b('?[a-z])/) { $1.capitalize }
  end
end
于 2013-10-03T18:58:09.403 回答
6

您可以自己实现正确的方法:

class String
  def my_titleize
    split.map(&:capitalize).join(' ')
  end
end

"goyette-xyz-is wide road".my_titleize
#=> "Goyette-xyz-is Wide Road"
于 2013-10-03T08:33:38.417 回答
2

如果现在像我一样,即使是虚线也需要将第一个字母大写,你可以这样做:

def titleize_and_keep_dashes(text)
  text.split.map(&:capitalize).join(' ').split('-').map(&:titleize).join('-')
end
titleize_and_keep_dashes("goyette-xyz-is wide road")
# => "Goyette-Xyz Is Wide Road".
于 2015-06-22T10:07:46.993 回答
-1

.capitalize方法添加到您的 String 以使首字母自动大写。

于 2013-10-03T13:50:40.443 回答