我有網址模式已網址列,我想驗證該列是一個有效的URL,我已經嘗試用這樣的:如何驗證rails模型中的url?
class User < ActiveRecord::Base
validates_format_of :url, :with => URI::regexp(%w(http https))
end
但是,當我進入這個網址:http://ruby3arabi
它接受它,任何想法?
我有網址模式已網址列,我想驗證該列是一個有效的URL,我已經嘗試用這樣的:如何驗證rails模型中的url?
class User < ActiveRecord::Base
validates_format_of :url, :with => URI::regexp(%w(http https))
end
但是,當我進入這個網址:http://ruby3arabi
它接受它,任何想法?
我解決了這個問題,這種寶石https://github.com/ralovets/valid_url
我測試,發現URI ::正則表達式(%W(HTTP HTTPS))或URI :: regexp不夠好。
的故障排除使用正則表達式
/^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
選項:
所以空白,如果你想在模型中驗證,您應該使用此代替:
class User < ActiveRecord::Base
URL_REGEXP = /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
validates :url, format: { with: URL_REGEXP, message: 'You provided invalid URL' }
end
測試:
[1] URI ::正則表達式(%(重量)(HTTP HTTPS))
測試與錯誤網址:
測試與正確的URL:
[2] URI: :正則表達式
測試與錯誤網址:
用正確的網址進行測試:
[3]/^(HTTP | HTTPS):// [A-Z0-9] +([ - ] { 1} [a-z0-9] +)。[az] {2,5}(:[0-9] {1,5})?(/。 ?)$/IX
測試與錯誤網址:
測試與正確的URL:
我會說這是完美的正則表達式我一直尋找。 –
以上正則表達式在rails 4中拋出一個參數錯誤(多行表達式的安全問題)。備用方法是使用\ A作爲字符串的開始,\ z作爲結束。 –
另一顆寶石選擇在這裏:validates_url。
此問題在此深入討論http://stackoverflow.com/questions/7167895/whats-a-good-way-to-validate-links-urls-in-rails – Semjon
可能的重複[Rails:什麼是好的驗證鏈接(URL)的方法?](https://stackoverflow.com/questions/7167895/rails-whats-a-good-way-to-validate-links-urls) –