2011-03-16 39 views
30

Trong ứng dụng đường ray của tôi, tôi cần phải xác minh xem URL do người dùng cung cấp có thực sự là URL hay không. Tôi chỉ quan tâm đến giao thức HTTP (và có lẽ HTTPS, tôi đã không xem xét điều đó chút nào), điều này khiến tôi tin rằng có thể có thứ gì đó trong đường ray có thể thực hiện công việc này cho tôi.Kiểm tra xem chuỗi đã cho là một URL

Nếu không: bạn có thể giới thiệu chuỗi regex thực hiện việc này không? Tôi đã tìm thấy một số sau khi googling nhưng tất cả họ dường như có một vấn đề hoặc hai theo ý kiến ​​của người dùng.

Cảm ơn

Trả lời

62

Sử dụng URI library.

def uri?(string) 
    uri = URI.parse(string) 
    %w(http https).include?(uri.scheme) 
rescue URI::BadURIError 
    false 
rescue URI::InvalidURIError 
    false 
end 

Đây là ví dụ rất đơn giản. Lợi thế của việc sử dụng thư viện URI trong cụm từ thông dụng là bạn có thể thực hiện các kiểm tra phức tạp.

+0

Trên thực tế bây giờ mà tôi đã viết một số xét nghiệm với một loạt các URL không hợp lệ khác nhau tôi thấy rằng phương pháp này xác nhận "http: //foo.invalid" là đúng. Có lẽ tôi chỉ cần fiddle xung quanh nhiều hơn? –

+0

Bởi vì nó thực sự là một URI hợp lệ. Nếu bạn muốn xác thực URL, hãy đảm bảo rằng #path và #scheme tồn tại. –

+0

'% w (http https)' trong mã ví dụ của bạn là gì? –

4

validates :url, :format => URI::regexp(%w(http https))

+1

Điều này sẽ xác nhận sai một chuỗi như "http: // kiểm tra google.com " –

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