Rubyで投稿のタイトルをスラッグに変換するにはどうすればよいですか?
タイトルには任意の文字を使用できますが、スラッグに[a-z0-9-_]
を許可するだけです(他の文字を許可する必要がありますか?)。
だから基本的に:
slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
downcase
は小文字にします。 strip
は、先頭または末尾に空白がないことを確認します。最初のgsub
は、スペースをハイフンに置き換えます。 2番目のgsub
は、非英字、非ダッシュ、下線以外のすべての文字を削除します(このセットは\W
に非常に近いが、ダッシュも含まれているため、ここに表記されているので注意してください)。
これはRailsですか?
string.parameterize
それでおしまい。さらに洗練されたスラッギングについては、 ActsAsUrl を参照してください。次のことができます。
"rock & roll".to_url => "rock-and-roll"
"$12 worth of Ruby power".to_url => "12-dollars-worth-of-Ruby-power"
"10% off if you act now".to_url => "10-percent-off-if-you-act-now"
"kick it en Français".to_url => "kick-it-en-francais"
"rock it Español style".to_url => "rock-it-espanol-style"
"tell your readers 你好".to_url => "tell-your-readers-ni-hao"
to_slug はすばらしいRailsプラグインで、ファンキーな文字を含むほとんどすべてを処理しますが、その実装は非常に簡単です。それをStringと並べ替えられます。ここにソースが要約されています。
String.class_eval do
def to_slug
value = self.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n, '').to_s
value.gsub!(/[']+/, '')
value.gsub!(/\W+/, ' ')
value.strip!
value.downcase!
value.gsub!(' ', '-')
value
end
end
私はこの宝石を使用しました。シンプルですが便利です。
私は、スラグを作成することを自称した「スイス軍ブルドーザー」であるFriendlyIdが好きです。 https://github.com/norman/friendly_id