как безопасно заменить все пробелы на символы подчеркивания с Рубином?



это работает для всех строк, которые имеют пробелы в них



str.downcase.tr!(" ", "_")


но строки, которые не имеют пробелов просто будут удалены



таким образом, "новая школа" изменится на "new_school", но "цвет" будет"", ничего!

573   8  

8 ответов:

документы на tr! сказать

Translates str in place, using the same rules as String#tr. Returns str, or nil if no changes were made.

Я думаю, что вы получите правильные результаты, если вы используете tr без восклицательного.

С места

str = "New School"
str.parameterize.underscore

=> "new_school"

без пробела

str = "school"
str.parameterize.underscore

=> "school"

изменить :- также мы можем передать '_' в качестве параметра для параметризации.

С места

str = "New School"
str.parameterize('_')

=> "new_school"

без пробела

str = "school"
str.parameterize('_')

=> "school"

Если вы заинтересованы в получении строку случае змея, то предлагаемое решение не совсем работает, потому что вы можете получить сцепленные подчеркивания и начальные/конечные подчеркивания.

1.9.3-p0 :010 > str= "  John   Smith Beer "
  => "  John   Smith Beer " 
1.9.3-p0 :011 > str.downcase.tr(" ", "_")
  => "__john___smith_beer_"

это решение ниже будет лучше работать:

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-это строковый метод, предоставляемый Rails

старый вопрос, но...

на все пробел вы, вероятно, хотите что-то вроде этого:

"hey\t there   world".gsub(/\s+/, '_') # hey_there_world

Это получает вкладки и новые строки, а также пробелы и заменяет одним _.

регулярное выражение может быть изменен в соответствии с вашими потребностями. Например:

"hey\t there   world".gsub(/\s/, '_') # hey__there___world
str.downcase.tr(" ", "_")

Примечание: Нет "!"

Если вы используете рельсы 5 и выше, вы можете достичь того же с

str.parameterize(separator: '_')

вы также можете сделать ул.gsub(" ", "_")

str = "Foo Bar"
str.tr(' ','').underscore

=> "foo_bar"

Comments

    Ничего не найдено.