2013-10-03 105 views
14

如何利用字符串在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删除下划线和连字符,但我想保留在字符串中。

+3

'“goyette-XYZ-是宽的道路”。 split('').map(&:capitalize).join('')' – apneadiving

+0

计算机应该如何知道'Goyette','Wide'和'Road'是应该大写的单词,以及'xyz'和'是'不是吗?您是否打算拥有数据库或人工智能作为此方法的一部分?告诉我们你使用的是什么样的人工智能。否则,这个问题没有完全说明。 – sawa

+0

@sawa我认为OP希望将连字符部分('goyette-xyz-is')当作一个单词处理。 – Stefan

回答

6

您可以通过自己实施适当的方法:

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

"goyette-xyz-is wide road".my_titleize 
#=> "Goyette-xyz-is Wide Road" 
+6

不要猴子补丁核心类!!!!!!!!!!!!!!!!!! – apneadiving

+1

@apneadiving为什么不呢? rails获得了一大堆https://github.com/rails/rails/tree/feaa6e2048fe86bcf07e967d6e47b865e42e055b/activesupport/lib/active_support/core_ext – j03w

+1

@ j03w Rails核心开发人员对Ruby有很深的认识。事实上,Rails约定几乎是Rails开发人员对Ruby本身的期望。当你使用Rails的时候,它是基础的一部分,如果你想玩foudnations,玩得开心,但是对你的稳定性感到恐惧 – apneadiving

1

添加.capitalize方法您的字符串来获得的第一个字母自动大写。

36

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

您可以了解更多有关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 

实际上保持 “ - ” 的作品中,我们可以添加一个新的方法String类这样的。

# ./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 
+4

虽然很好地解释了titleize如何工作,但它并没有真正回答这个问题:在保持破折号的同时标题。 –

+0

不回答实际问题。 –

+0

@DanishM。我只是添加了一个更新到我的解决方案,我希望他的帮助 – MZaragoza

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". 
相关问题