2009-03-29 1 views

Antwort

2

Sie können tr mit dem zweiten Argument als eine leere Zeichenkette verwenden. Zum Beispiel:

%("... text... ").tr('"', '') 

würde alle doppelten Anführungszeichen entfernen.

Auch wenn Sie diese Funktion verwenden, um Ihre Eingabe oder Ausgabe zu bereinigen, wird sie wahrscheinlich SQL-Injection- oder Cross Site Scripting-Angriffe nicht verhindern. Bei HTML ist es besser, wenn Sie die Funktion "desm sinitize" oder die Funktion "view helper" h verwenden.

+2

Aber ich möchte nur "am Anfang und am Ende meiner Strange" ersetzen g/Text. – alamodey

0

könnten Sie String verwenden # gsub:

%("... text... ").gsub(/\A"+|"+\Z/,'') 
+0

Das sollte eigentlich ein Kleinbuchstabe '\ z' sein. –

1

Ich weiß nicht, von einem aus der Box, aber das sollte das tun, was Sie wollen:

class String 
    def strip_str(str) 
    gsub(/^#{str}|#{str}$/, '') 
    end 
end 

a = '"Hey, there are some extraneous quotes in this here "String"."' 
puts a.strip_str('"') # -> Hey, there are some extraneous quotes in this here "String". 
+1

Beachten Sie, dass '^' und '$' dem Anfang und dem Ende der Zeile entsprechen. Sie möchten, dass '\ A' und' \ z' den Anfang und das Ende der Zeichenfolge abgleichen. –

0
class String 
    # Treats str as array of char 
    def stripc(str) 
    out = self.dup 
    while str.each_byte.any?{|c| c == out[0]} 
     out.slice! 0 
    end 
    while str.each_byte.any?{|c| c == out[-1]} 
     out.slice! -1 
    end 
    out 
    end 
end 

Chucks Antwort benötigt einige + Zeichen, wenn Sie alle zusätzliche Instanzen seiner Zeichenfolge entfernen möchten. Und es funktioniert nicht, wenn Sie eine Reihe von Zeichen entfernen möchten, die in beliebiger Reihenfolge angezeigt werden.

Zum Beispiel, wenn wir einen String nicht am Ende mit einem der folgenden Eigenschaften wünschen: a, b, c und unser String fooabacab, müssen wir etwas stärker wie der Code, den ich oben geliefert habe.

2

Ich weiß nicht, ob ich das Rad neu zu erfinden bin hier so, wenn Sie eine integrierte Methode finden, die das gleiche tut, lass es mich wissen :-)

ich folgendes zu config/initializers/string.rb hinzugefügt, die Fügen Sie der String-Klasse die Methoden trim, ltrim und rtrim hinzu.

# in config/initializers/string.rb 
class String 
    def trim(str=nil) 
    return self.ltrim(str).rtrim(str) 
    end 

    def ltrim(str=nil) 
    if (!str) 
     return self.lstrip 
    else 
     escape = Regexp.escape(str) 
    end 

    return self.gsub(/^#{escape}+/, "") 
    end 

    def rtrim(str=nil) 
    if (!str) 
     return self.rstrip 
    else 
     escape = Regexp.escape(str) 
    end 

    return self.gsub(/#{escape}+$/, "") 
    end 
end 

und ich verwende es wie folgt aus:

"... hello ...".trim(".") => "Hallo"

und

"\"hello\"".trim("\"") => "Hallo"

Ich hoffe, das hilft :-)