def titleize(string)
string.split(" ").map {|word| word.capitalize}.join(" ")
end
这会标题化每个单词,但我如何捕捉某些我不想大写的单词?
即) jack 和吉尔
请不要使用正则表达式。
更新:
我在使这段代码工作时遇到了问题:我让它打印了一个全部大写的单词数组,但并非没有下面的列表。
words_no_cap = ["and", "or", "the", "over", "to", "the", "a", "but"]
def titleize(string)
cap_word = string.split(" ").map {|word| word.capitalize}
cap_word.include?(words_no_cap)
end
最佳答案
您可能想为 existing titleize
创建一个扩展Rails 提供的功能。
为此,只需将以下文件包含在初始化程序中,然后就可以了!即时提供异常或有选择地修改我的示例以将默认值添加到初始化程序中。
我知道您不想使用 Regex,但是,嘿,实际的 rails 函数使用 Regex,所以您最好保持同步。
将此文件放入 Rails.root/lib/string_extension.rb
并在初始化程序中加载它;或者只是将其放入初始化程序本身。
更新:根据@svoop 关于添加结束词边界的建议修改了 REGEX。
# encoding: utf-8
class String
def titleize(options = {})
exclusions = options[:exclude]
return ActiveSupport::Inflector.titleize(self) unless exclusions.present?
self.underscore.humanize.gsub(/\b(?<!['’`])(?!(#{exclusions.join('|')})\b)[a-z]/) { $&.capitalize }
end
end
关于Ruby:Titleize:如何忽略较小的词,如 'and' 、 'the' 、 'or 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15078964/