Dies funktioniert für alle Zeichenfolgen, die Leerzeichen enthalten
str.downcase.tr!(" ", "_")
Zeichenfolgen, die keine Leerzeichen enthalten, werden jedoch einfach gelöscht
"New School" würde sich also in "new_school" ändern, aber "color" wäre "", nichts!
ruby-on-rails
ruby
ruby-on-rails-3
Rugbert
quelle
quelle
str.gsub! /\s/, '_'
Antworten:
Die Dokumente für tr! sagen
Ich denke, Sie erhalten die richtigen Ergebnisse, wenn Sie tr ohne Ausrufezeichen verwenden.
quelle
!
ändert sich, was auch immer es nennt, während es ohne das!
eine neue Zeichenfolgestr = "New School" str.parameterize.underscore => "new_school"
str = "school" str.parameterize.underscore => "school"
Bearbeiten: - Wir können auch '_' als Parameter zur Parametrisierung übergeben.
str = "New School" str.parameterize('_') => "new_school"
str = "school" str.parameterize('_') => "school"
EDIT :
Verwenden Sie für Schienen 5 und höher
str.parameterize(separator: '_')
quelle
parameterize
konvertiert mehr als Leerzeichen - viele Sonderzeichen werden ebenfalls konvertiert. Die Absicht vonparameterize
ist es, eine Zeichenfolge URL-freundlich zu machen.String#parameterize
in Ruby keine gibt . Es gibt jedochString#parameterize
in Rails.str.parameterize(separator: '_')
.Wenn Sie daran interessiert sind, eine Zeichenfolge im Fall einer Schlange zu erhalten , funktioniert die vorgeschlagene Lösung nicht ganz, da Sie möglicherweise verkettete Unterstriche und beginnende / nachfolgende Unterstriche erhalten.
Zum Beispiel
1.9.3-p0 :010 > str= " John Smith Beer " => " John Smith Beer " 1.9.3-p0 :011 > str.downcase.tr(" ", "_") => "__john___smith_beer_"
Diese Lösung unten würde besser funktionieren:
1.9.3-p0 :010 > str= " John Smith Beer " => " John Smith Beer " 1.9.3-p0 :012 > str.squish.downcase.tr(" ","_") => "john_smith_beer"
Squish ist eine von Rails bereitgestellte String-Methode
quelle
str.downcase.split.join('_')
denke, es könnte auch funktionieren, wenn #squish nicht verfügbar ist;)Wenn Sie Schienen 5 und höher verwenden, können Sie dasselbe mit erreichen
str.parameterize(separator: '_')
quelle
str.downcase.tr(" ", "_")
Hinweis: Nein "!"
quelle
Alte Frage, aber ...
Für alle Leerzeichen möchten Sie wahrscheinlich mehr davon:
"hey\t there world".gsub(/\s+/, '_') # hey_there_world
Dies erhält Tabulatoren und neue Zeilen sowie Leerzeichen und wird durch eine einzelne ersetzt
_
.Der Regex kann an Ihre Bedürfnisse angepasst werden. Z.B:
"hey\t there world".gsub(/\s/, '_') # hey__there___world
quelle
str = "Foo Bar" str.tr(' ','').underscore => "foo_bar"
quelle
Sie können auch str.gsub ("", "_") ausführen.
quelle