6
Đã có một số bài đăng về việc liên kết văn bản bằng cách sử dụng regex. Phổ biến nhất is this post.Ruby liên kết cho các url trong chuỗi
Tuy nhiên spec của tôi là một chút khó khăn hơn:
describe TextFormatter do
def l(input)
TextFormatter.gsub_links!(input){|link| "!!#{link}!!"}
end
it "should detect simple links" do
l("http://www.cnn.com").should == "!!http://www.cnn.com!!"
end
it "should detect multi links" do
l("http://www.cnn.com http://boats.com?help.asp").should == "!!http://www.cnn.com!! !!http://boats.com?help.asp!!"
end
it "should compensate for parans properly" do
l("(http://this.is?hello_world)").should == "(!!http://this.is?hello_world!!)"
end
it "should ignore existing links" do
s = "<A HREF='http://sam.com'> http://sam.com </A>"
l(s.dup).should == s
end
it "should allow parans" do
l("http://sam.com.au?(red)").should == "!!http://sam.com.au?(red)!!"
end
end
Bất kỳ ý tưởng làm thế nào để thực hiện các Regex lông:
Đây là nơi mà tôi cho đến nay (nó không thành công 2 bài kiểm tra):
def gsub_links!(input)
regex = /https?\:\/\/[\-\w+&@#\/%?=~\(\)\|!:,.;]*[\-\w+&@#\/%=~_\(\)|]/
input.gsub!(regex) { |link|
yield link
}
end
yerp, liên kết tự động dường như vượt qua tất cả các thử nghiệm của tôi ... cảm ơn vì đã chỉ ra –
lý do tại sao nó có thể không hoạt động trong ứng dụng? Tôi nhận được lỗi "số tệp đối số sai (2 cho 1): vị trí tag_helper.rb: tag_options line: 113" trong khi cố gắng thực hiện điều đó. Nó hoạt động hoàn hảo trong giao diện điều khiển mặc dù – Arty
'auto_link' đã biến mất khỏi Rails kể từ 3.1. Xem http://stackoverflow.com/questions/6418710/replacing-the-auto-link-method-in-ruby-on-rails-3-1 để có câu trả lời cập nhật. – Thilo