Cela fonctionne pour toutes les chaînes contenant des espaces blancs
str.downcase.tr!(" ", "_")
mais les chaînes qui n'ont pas d'espaces sont supprimées
Donc "New School" deviendrait "new_school" mais "color" serait "", rien!
avec espace
str = "New School"
str.parameterize.underscore
=> "new_school"
sans espace
str = "school"
str.parameterize.underscore
=> "school"
Edit: - on peut aussi passer '_' comme paramètre à paramétrer.
avec espace
str = "New School"
str.parameterize('_')
=> "new_school"
sans espace
str = "school"
str.parameterize('_')
=> "school"
Si vous souhaitez obtenir une chaîne dans cas de serpent , la solution proposée ne fonctionne pas tout à fait, car vous pouvez obtenir des traits de soulignement concaténés et des traits de soulignement de début/fin.
Par exemple
1.9.3-p0 :010 > str= " John Smith Beer "
=> " John Smith Beer "
1.9.3-p0 :011 > str.downcase.tr(" ", "_")
=> "__john___smith_beer_"
Cette solution ci-dessous fonctionnerait mieux:
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 est une méthode String fournie par Rails
Si vous utilisez Rails 5 et plus, vous pouvez obtenir la même chose avec
str.parameterize(separator: '_')
Vieille question, mais ...
Pour tous les espaces, vous voulez probablement quelque chose de plus comme ceci:
"hey\t there world".gsub(/\s+/, '_') # hey_there_world
Cela obtient des tabulations et de nouvelles lignes ainsi que des espaces et les remplace par un seul _
.
Le regex peut être modifié selon vos besoins. Par exemple:
"hey\t there world".gsub(/\s/, '_') # hey__there___world
str.downcase.tr(" ", "_")
Remarque: pas de "!"
str = "Foo Bar"
str.tr(' ','').underscore
=> "foo_bar"
Vous pouvez également faire str.gsub ("", "_")