Url验证rails

时间:2016-06-27 19:01:27

标签: ruby-on-rails validation url testing

在我的模型中,我添加了以下代码,用于验证用户可以输入的URL:

validates :website, presence: true
validates :website, format: { with: URI.regexp }, if: 'website.present?'

我用无效的网址编写了一个测试:

http://example,nl

当我运行测试时,验证表明这是一个有效的输入。我已经在程序中尝试了它,这是一个可接受的URI。有没有办法设置URI.regex所以这是一个无效的URL?

1 个答案:

答案 0 :(得分:1)

URI.regexp返回一个匹配所有有效URI的URI,但是a)它不验证该字符串该URI,以及b)您要验证URL,而不是URI (URI是更广泛的术语)。

对于a),只有当字符串只是URI时,才能修改正则表达式,方法是将其包装在^(行首)和$中(结束时)线)符号:

validates :website, format: { with: /^#{URI.regexp.to_s}$/ }, if: 'website.present?'

对于b),您可以将呼叫更改为URI.regexp(['http', 'https'])以限制允许的方案,从而使您更接近。这个问题也有宝石,比如valid_url。或者,接受您的验证永远不会是完美的。