2009-03-29 8 views

risposta

2

È possibile utilizzare tr con il secondo argomento come una stringa vuota. Ad esempio:

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

rimuovere tutte le virgolette doppie.

Anche se si utilizza questa funzione per disinfettare il proprio input o output, probabilmente non sarà efficace nel prevenire attacchi SQL injection o Cross Site Scripting. Per HTML è preferibile utilizzare la funzione gem di sanitizzazione o la funzione di visualizzazione della vista h.

+2

Ma voglio solo sostituire "all'inizio e alla fine del mio strin g/testo. – alamodey

0

Si potrebbe utilizzare String # gsub:

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

In realtà dovrebbe essere un '\ z' minuscolo. –

1

Non so di uno, fuori dalla scatola, ma questo dovrebbe fare ciò che si vuole:

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

Nota che '^' e '$' corrispondono all'inizio e alla fine della riga. Vuoi '\ A' e' \ z' per abbinare l'inizio e la fine della stringa. –

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 

risposta di Chuck ha bisogno di alcuni segni + se si desidera rimuovere tutte le istanze supplementari del suo modello di stringa. E non funziona se vuoi rimuovere una serie di caratteri che potrebbero apparire in qualsiasi ordine.

Ad esempio, se vogliamo che una stringa non termini con uno dei seguenti elementi: a, b, c, e la nostra stringa è fooabacab, abbiamo bisogno di qualcosa di più forte come il codice che ho fornito sopra.

2

Non so se sto reinventare la ruota qui quindi se si trova un metodo incorporato che fa lo stesso, fatemelo sapere :-)

ho aggiunto il testo seguente config/initializers/string.rb, che aggiungere i metodi trim, ltrim e rtrim alla classe String.

# 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 

e lo uso come questo:

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

e

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

Spero che questo aiuta :-)