经过一系列的研究和尝试不同的宝石后,我最终滚动了以下内容:
validates :url,
presence: true,
length: { maximum: 245 },
format: { with: URI.regexp(%w(http https)), message: :bad_url_format }
这正确验证了http://和https://前缀,但它允许任何类型的域扩展,即http://go.forever。
这被认为是正常的吗?
答案 0 :(得分:1)
是的,这对于URL验证来说是正常的。鉴于最近expansion of top-level domains超过一百,以及该列表增长的可能性,尝试并强制执行允许的TLD列表将非常麻烦和脆弱。
答案 1 :(得分:1)
如果你真的想验证域扩展,我会按照这一点做点什么。
使用自定义验证
validate :correct_url_extension
EXTENSIONS = %w(com org gov blah foo blah bar)
def correct_url_extension
ext = url.split(".")[-1] #extension should always be at the end (parse here)
return EXTENSIONS.include?(ext) ? true : false
end