2009-03-29 40 views

Trả lời

2

Bạn có thể sử dụng tr với đối số thứ hai như là một chuỗi trống. Ví dụ:

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

sẽ xóa tất cả các dấu ngoặc kép.

Mặc dù nếu bạn đang sử dụng chức năng này để khử trùng đầu vào hoặc đầu ra của bạn thì nó có thể sẽ không hiệu quả trong việc ngăn chặn các cuộc tấn công SQL injection hoặc Cross Site Scripting. Đối với HTML, bạn nên sử dụng gem sanitize hoặc chức năng trợ giúp xem h.

+2

Nhưng tôi chỉ muốn thay thế "ở đầu và cuối của strin g/văn bản. – alamodey

0

Bạn có thể sử dụng String # gsub:

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

Điều đó thực sự phải là chữ thường '\ z'. –

1

Tôi không biết của ai ra khỏi hộp, nhưng điều này nên làm những gì bạn muốn:

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

Lưu ý rằng '^' và '$' khớp với điểm bắt đầu và kết thúc của dòng. Bạn muốn '\ A' và' \ z' khớp với đầu và cuối của chuỗi. –

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 

câu trả lời của Chuck cần một số dấu hiệu + nếu bạn muốn xóa tất cả trường hợp bổ sung của mẫu chuỗi của mình. Và nó không hoạt động nếu bạn muốn loại bỏ bất kỳ bộ ký tự nào có thể xuất hiện theo bất kỳ thứ tự nào. Ví dụ:

Ví dụ: nếu chúng tôi muốn một chuỗi không kết thúc bằng bất kỳ điều nào sau đây: a, b, c và chuỗi của chúng tôi là fooabacab, chúng tôi cần thứ gì đó mạnh hơn như mã tôi đã cung cấp ở trên.

2

Tôi không biết nếu tôi reinventing the wheel đây vì vậy nếu bạn tìm thấy một built-in phương pháp đó cũng làm như vậy, hãy cho chúng tôi biết :-)

tôi đã thêm dòng sau vào config/initializers/string.rb, mà thêm các phương thức trim, ltrimrtrim vào lớp Chuỗi.

# 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 

và tôi sử dụng nó như thế này:

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

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

Tôi hy vọng điều này sẽ giúp :-)

Các vấn đề liên quan