2011-09-25 13 views

Odpowiedz

31

Docs dla tr! powiedzieć

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

myślę dostaniesz poprawnych wyników, jeśli używasz tr bez wykrzykników.

+0

Rzeczywiście, '!' zmienia to, co go nazywa, podczas gdy bez '!' zwraca nowy ciąg – erdostom

6

Uwaga: Nie "!"

1

Można również zrobić tekst.gsub (wyr”” «_»)

34

Jeśli jesteś zainteresowany w uzyskaniu ciąg w snake case, to proponowane rozwiązanie nie dość pracy, ponieważ można uzyskać połączone podkreślenia i początkowe/końcowe znaki podkreślenia.

Na przykład

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

To rozwiązanie poniżej będzie działać lepiej:

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 jest metoda String dostarczane przez Rails

+2

I rysunek '' 'str.downcase.split.join (' _ ') '' 'może również działać, jeśli #squish nie jest dostępny;) – vidbina

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

=> "foo_bar" 
71

przestrzeni

str = "New School" 
str.parameterize.underscore 

=> "new_school" 

bez przestrzeni

str = "school" 
str.parameterize.underscore 

=> "school" 

Edycja: - również możemy przekazać '_' jako parametr do parametryzacji.

przestrzeni

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

=> "new_school" 

bez przestrzeni

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

=> "school" 
+1

Uważaj. Parametryzacja spowoduje konwersję więcej niż spacji - wiele znaków specjalnych również zostanie przekonwertowanych. Celem 'parametryzacji' jest utworzenie przyjaznego dla adresu URL łańcucha znaków. –

+2

Należy zachować ostrożność, ponieważ w Ruby nie ma parametru 'String # parameterize'. Jednak w Railsach występuje 'String # parameterize'. – dskecse

+2

Parametryzowanie nie powoduje już przyjęcia argumentu. – stephenmurdoch

7

stare pytanie, ale ...

Dla wszystko spacje prawdopodobnie chcesz czegoś więcej tak:

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

To dostaje karty i nowe linie, a także przestrzenie i zastępuje z jednym _.

Sprecyzowanie można zmodyfikować zgodnie z potrzebami. Np:

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

Jeśli używasz szyn 5 i powyżej można osiągnąć to samo z

str.parameterize(separator: '_') 
Powiązane problemy