2013-10-03 104 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". 
相關問題