當用戶提交鏈接時,是否有方法來驗證他是否包含http://或不包含。換句話說,是否有可能不僅驗證,而且還添加http://如果缺失?Rails 3並驗證鏈接中是否包含http
我正在使用Rails 3.
當用戶提交鏈接時,是否有方法來驗證他是否包含http://或不包含。換句話說,是否有可能不僅驗證,而且還添加http://如果缺失?Rails 3並驗證鏈接中是否包含http
我正在使用Rails 3.
您可以覆蓋setter方法的鏈接。在你的模型中,如下所示:
def link=(str)
str = 'http://' + str if str[0,7] != 'http://'
super(str)
end
這將強制將http://添加到所有鏈接的開頭(如果尚未存在)。
您可以使用自定義驗證。
假裝你的模式是「郵報」的屬性爲「URL」,您可以使用類似:
class Post < ActiveRecord::Base
validate :ensure_valid_url
protected
def ensure_valid_url
protocol_regexp = %r{
\A
(https?://)
.*
\Z
}iux
self.url = "http://" + url unless url.blank? or url.match(protocol_regexp)
ipv4_part = /\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]/ # 0-255
regexp = %r{
\A
https?://
([^\s:@]+:[^\s:@]*@)?
((xn--)?[[:alnum:]\w_]+([-.][[:alnum:]\w_]+)*\.[a-z]{2,6}\.? |
#{ipv4_part}(\.#{ipv4_part}){3})
(:\d{1,5})?
([/?]\S*)?
\Z
}iux
default_message = 'does not appear to be a valid URL'
default_message_url = 'does not appear to be valid'
options = { :allow_nil => false,
:allow_blank => false,
:with => regexp }
message = url.to_s.match(/(_|\b)URL(_|\b)/i) ? default_message_url : default_message
validates_format_of(:url, { :message => message }.merge(options))
end
end
這個例子是基於validates_url_format_of
史蒂夫·Lorek的回答在這方面採取一些鏈接提交的用戶將包含HTTPS賬戶變動://而不是http://
def link=(str)
str = 'http://' + str if (str[0,7] != 'http://' && str[0,8] != 'https://')
super(str)
end