Ruby on rails 如何在rails模型中验证url?
我有Url模型有Url列,我想验证该列是否为有效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
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而失败