2015-04-21 114 views
5

Rails titleize方法刪除連字符,並且大寫方法不會大寫連字符後面的單詞。我想類似以下內容(通過編寫一個方法):Ruby on Rails標題名稱

"mary-joe spencer-moore" => "Mary-Joe Spencer-Moore" 
"mary-louise o'donnell" => "Mary-Louise O'Donnell" 
+0

寫的方法? –

回答

13

Check Titelize implementation,並從中你可以得到:

"mary-joe spencer-moore".humanize.gsub(/\b('?[a-z])/) { $1.capitalize } 

會給你=>「瑪麗 - 喬·斯賓塞 - 穆爾」

,你可以在字符串類寫一個函數吧,加入intalizers:

class String 
    def my_titleize 
    humanize.gsub(/\b('?[a-z])/) { $1.capitalize } 
    end 
end 

,然後從你的代碼:

"mary-joe spencer-moore".my_titleize 
+0

謝謝@穆罕默德 - 斯塔克還有一個問題。我們能否更普遍地使用它,比如O'Brien,O'Connor? – kangkyu

+0

是的,當然你需要修改正則表達式來匹配冒號後的charcter,以便在正則表達式捕獲中利用它。 –

+0

謝謝,但是,爲了說清楚,我是否可以獲得該方法的正則表達式或工作代碼來執行「瑪麗 - 路易絲奧唐奈」=>「瑪麗 - 路易斯奧唐奈」? – kangkyu

5

你也可以得到通過拆分您的字符串,並分別titleizing的部分所期望的結果:

"mary-louise o'donnell".split('-').map(&:titleize).join('-') 
+0

這樣做有效,但是在一些Benchmark測量它似乎比其他方法慢3倍。那麼......這並不重要,因爲平均9.214543926410341e-05s仍然非常好。 – Kulgar

+0

是的,我喜歡這個解決方案的簡潔。如果您正在嘗試處理千兆字節的文本,則可能需要使用更優化的簡潔解決方案。取決於你的用例。 – gabeodess