簡體   English   中英

使用ruby gsub和regexp更智能地替換字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM