Ruby on rails ruby rails模型url验证

Ruby on rails ruby rails模型url验证,ruby-on-rails,validation,activerecord,Ruby On Rails,Validation,Activerecord,经过一系列研究和尝试不同的宝石,我最终得出以下结论: validates :url, presence: true, length: { maximum: 245 }, format: { with: URI.regexp(%w(http https)), message: :bad_url_format } 这将正确验证http://和https://前缀,但它允许任何类型的域扩展,例如 这算正常吗 是的,这对于UR

经过一系列研究和尝试不同的宝石,我最终得出以下结论:

  validates :url,
            presence: true,
            length: { maximum: 245 },
            format: { with: URI.regexp(%w(http https)), message: :bad_url_format }
这将正确验证http://和https://前缀,但它允许任何类型的域扩展,例如


这算正常吗

是的,这对于URL验证来说是正常的。考虑到最近超过100个TLD,以及该列表增长的可能性,尝试强制执行允许的TLD列表将非常麻烦和脆弱。

是的,这对于URL验证来说是正常的。考虑到最近超过100个TLD,以及该列表增长的可能性,尝试强制执行允许的TLD列表将非常麻烦和脆弱。

如果您真的想验证域扩展,我将按照这一思路做一些事情

使用自定义验证

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

如果您真的想验证域扩展,我会按照下面的思路做一些事情

使用自定义验证

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