[英]smarter character replacement using ruby gsub and regexp
我正在嘗試為某些文章標題創建類似行為的永久鏈接,我不想為永久鏈接添加新的數據庫字段。 所以我決定寫一個幫助器來轉換我的文章標題:
“ O”focoasă“a pornit cruciada,împotrivabărbaţilorzgârciţi ”to“ o-focoasa-a-pornit-cruciada-impotriva-barbatilor-zgarciti ”。
雖然我想出了如何用連字符替換空格並刪除其他特殊字符(除了 - )使用:
title.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase
我想知道是否有任何其他方法可以從一個.gsub方法調用替換一個特定的其他字符的字符,所以我不必為所有的鏈接title.gsub(“ă”,“a”)方法我本地化的UTF-8特殊字符。
我正在考慮用所有特殊字符和它們的對應物構建一個哈希,但我還沒有弄清楚如何使用regexp的變量。
我在尋找的是:
title.gsub(/\s/, "-").gsub(*replace character goes here*).gsub(/[^\w-]/, '').downcase
謝謝!
我在我的應用程序中使用Unidecoder gem解決了這個問題:
require 'unidecode'
def uninternationalize(str)
Unidecoder.decode(str).gsub("[?]", "").gsub(/`/, "'").strip
end
如果你只想從一個字符音譯到另一個字符,你可以使用String#tr
方法,它與Unix tr
命令完全相同:用第二個列表中相同位置的字符替換第一個列表中的每個字符:
'Ünicöde'.tr('ÄäÖöÜüß', 'AaOoUus') # => "Unicode"
但是,我同意@Daniel Vandersluis:使用一些更專業的庫可能是個好主意。 像這樣的東西可以變得非常乏味,非常快。 此外,很多這些角色實際上都有標准化的音譯(ä→ae,ö→oe,...,ß→ss),用戶可能期望音譯正確(我當然不喜歡被稱為Jorg) - 如果你真的必須,你可以叫我Joerg,但我更喜歡Jörg)如果你有一個圖書館為你提供這些音譯,為什么不使用它們呢? 請注意,有很多音譯不是單個字符,因此無論如何都不能與String#tr
一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.