Hoe moet ik een posttitel omzetten in een slug in Ruby?
De titel kan alle tekens bevatten, maar ik wil alleen dat de slug [a-z0-9-_]
toestaat (Mogen er andere tekens worden toegestaan?).
Dus eigenlijk:
- alle letters in kleine letters
- converteer spaties naar koppeltekens
- externe tekens verwijderen
Antwoord 1, autoriteit 100%
Is dit Rails? (werkt in Sinatra)
string.parameterize
Dat is het. Voor nog meer verfijnde slugging, zie ActsAsUrl. Het kan het volgende doen:
"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"
Antwoord 2, autoriteit 85%
slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
downcase
maakt het kleine letters. De strip
zorgt ervoor dat er geen voor- of achterliggende witruimte is. De eerste gsub
vervangt spaties door koppeltekens. De tweede gsub
verwijdert alle niet-alfa-niet-streepjes en niet-onderstrepingstekens (merk op dat deze set heel dicht bij \W
ligt maar ook het streepje bevat, daarom het staat hier beschreven).
Antwoord 3, autoriteit 7%
to_slugis een geweldige Rails-plug-in die vrijwel alles aankan, inclusief funky karakters, maar de implementatie ervan is erg makkelijk. Gooi het op Stringen je bent gesorteerd. Hier is de bron samengevat:
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
Antwoord 4, autoriteit 3%
Ik heb dit juweeltje gebruikt. Het is eenvoudig maar nuttig.
https://rubygems.org/gems/string_helpers
Antwoord 5
Ik hou van FriendlyId, de zelfverklaarde “Swiss Army Bulldozer” van het maken van slakken. https://github.com/norman/friendly_id