56 Stimmen

Ruby Beitragstitel zu Slug

Wie soll ich einen Beitragstitel in Ruby in einen Slug umwandeln?

Der Titel kann beliebige Zeichen enthalten, aber ich möchte nur den Slug zulassen [a-z0-9-_] (Sollte sie andere Zeichen zulassen?).

Also grundsätzlich:

  • alle Buchstaben klein schreiben
  • Leerzeichen in Bindestriche umwandeln
  • überflüssige Zeichen löschen

0 Stimmen

* zusätzliche Wörter entfernen, wenn der Titel länger als N Wörter ist

108voto

Mark Thomas Punkte 36148

Ist das Rails? (funktioniert in Sinatra)

string.parameterize

Das war's. Für noch ausgefeilteres Slugging, siehe ActsAsUrl . Es kann Folgendes tun:

"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"

89voto

Ben Lee Punkte 51313
slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')

downcase macht es klein. Die strip stellt sicher, dass keine führenden oder nachgestellten Leerzeichen vorhanden sind. Die erste gsub ersetzt Leerzeichen durch Bindestriche. Die zweite gsub entfernt alle Nicht-Alpha-Nicht-Bindestrich-Nicht-Underscore-Zeichen (beachten Sie, dass diese Menge sehr nahe an \W enthält aber auch den Bindestrich, weshalb er hier ausgeschrieben wird).

7voto

Jamie Rumbelow Punkte 4729

to_slug ist ein großartiges Rails-Plugin, das so ziemlich alles handhabt, einschließlich komischer Zeichen, aber seine Implementierung ist sehr einfach. Schmeißen Sie es auf Zeichenfolge und schon ist alles geregelt. Hier ist die Quelle in Kurzform:

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

3voto

Diego Montadori Punkte 31

Ich habe dieses Juwel benutzt. Es ist einfach, aber hilfreich.

https://rubygems.org/gems/string_helpers

0voto

Aaron Sumner Punkte 226

Ich mag FriendlyId, den selbsternannten "Bulldozer der Schweizer Armee", der Schnecken erstellt. https://github.com/norman/friendly_id

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X