Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在rails模型中验证url?_Ruby On Rails_Ruby_Validation_Url - Fatal编程技术网

Ruby on rails 如何在rails模型中验证url?

Ruby on rails 如何在rails模型中验证url?,ruby-on-rails,ruby,validation,url,Ruby On Rails,Ruby,Validation,Url,我有Url模型有Url列,我想验证该列是否为有效Url,我尝试了以下方法: class User < ActiveRecord::Base validates_format_of :url, :with => URI::regexp(%w(http https)) end class用户URI::regexp(%w(http https))的格式 结束 但当我输入此url时:http://ruby3arabi< /代码>接受它,有任何想法吗? < P>你应该考虑使用URI

我有Url模型有Url列,我想验证该列是否为有效Url,我尝试了以下方法:

class User < ActiveRecord::Base
    validates_format_of :url, :with => URI::regexp(%w(http https))
end
class用户URI::regexp(%w(http https))的格式
结束

但当我输入此url时:
http://ruby3arabi< /代码>接受它,有任何想法吗?

< P>你应该考虑使用URI.PARSE:< /P> < P>我用这个GEM

< P>解决了这个问题,我测试了<强> > URI::ReXEP(%W(HTTP HTTPS))<强> > URI::ReExpP不够好。

疑难解答正在使用此正则表达式

/^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
选项:

  • i-不区分大小写
  • x-忽略正则表达式中的空格
因此,如果要在模型中进行验证,则应使用以下方法:

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
class用户
测试:

  • [1] URI::regexp(%w(http https))

    使用错误的URL进行测试:

    • http://ruby3arabi -结果无效
    • http://http://ruby3arabi.com -结果无效
    • http://-结果无效

    使用正确的URL进行测试:

    • http://ruby3arabi.com -结果无效
    • http://www.ruby3arabi.com -结果无效
    • https://www.ruby3arabi.com -结果无效
    • https://www.ruby3arabi.com/article/1 -结果无效
    • https://www.ruby3arabi.com/websites/58e212ff6d275e4bf9000000?locale=en -结果无效

  • [2]URI::regexp

    使用错误的URL进行测试:

    • http://ruby3arabi -结果是有效的
    • http://http://ruby3arabi.com -结果是有效的
    • http://-结果有效

    使用正确的URL进行测试:

    • http://ruby3arabi.com -结果是有效的
    • http://www.ruby3arabi.com -结果是有效的
    • https://www.ruby3arabi.com -结果是有效的
    • https://www.ruby3arabi.com/article/1 -结果是有效的
    • https://www.ruby3arabi.com/websites/58e212ff6d275e4bf9000000?locale=en -结果是有效的

  • [3]/^(http | https):/[a-z0-9]+([-.]{1}[a-z0-9]+)[a-z]{2,5}(:[0-9]{1,5})(/)?$/ix

    使用错误的URL进行测试:

    • http://ruby3arabi -结果无效
    • http://http://ruby3arabi.com -结果无效
    • http://-结果无效

    使用正确的URL进行测试:

    • http://ruby3arabi.com -结果是有效的
    • http://www.ruby3arabi.com -结果是有效的
    • https://www.ruby3arabi.com -结果是有效的
    • https://www.ruby3arabi.com/article/1 -结果是有效的
    • https://www.ruby3arabi.com/websites/58e212ff6d275e4bf9000000?locale=en -结果是有效的


这里有另一个gem选项:。

这个问题在这里被深入讨论了可能的重复。你能解释一下如何在Rails中使用这个选项吗?谢谢这是一个很好的解释,我想说这是我一直在寻找的完美正则表达式。上面的正则表达式在rails 4中抛出了一个参数错误(多行表达式的安全问题)。另一种方法是使用\A作为字符串的开始,使用\z作为结束。此gem在2020年已普遍过时,它将因几个有效的TLD而失败