2011-03-16 22 views
30

Raylarım uygulamasında, bir kullanıcı tarafından verilen URL'nin gerçekten bir URL olup olmadığını doğrulamanız gerekir. Ben sadece HTTP protokolü ile ilgileniyorum (ve belki de HTTPS, hiç bakmadım), bu da bana zaten bu işi yapabilecek raylarda bir şey olabileceğine inanmamı sağlıyor.Verilen dizenin bir URL olup olmadığını kontrol edin

Değilse: bunu yapan bir normal ifade dizesini önerin misiniz? Google'dan sonra bir şeyler buldum ama hepsinin kullanıcı yorumlarına göre bir ya da iki problemi var gibi görünüyor.

Teşekkür

cevap

62

URI library kullanın.

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

Bu çok basit bir örnektir. Normal bir ifade üzerinde URI kitaplığı kullanmanın avantajı, karmaşık denetimleri gerçekleştirebilmenizdir. olarak doğrudur:

+0

Aslında şimdi farklı geçersiz URL'lerin bir grup ile bazı testler yazdım ben bu yöntem "//foo.invalid http" doğrular bulundu. Belki daha fazla etrafta dolaşmam gerekiyor mu? –

+0

Çünkü aslında geçerli bir URI. Bir URL'yi doğrulamak istiyorsanız, # yol ve # şema olduğundan emin olun. –

+0

Örnek kodunuzda '% w (http https)' nedir? –

4

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

+1

Bu, "http: //" gibi bir dizeyi hatalı olarak doğrulayacaktır. google.com testi " –

İlgili konular