网址验证Rails

Url validation rails

本问题已经有最佳答案,请猛点这里访问。

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

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

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

1
http://example,nl

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


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

对于a),可以将正则表达式修改为仅在字符串只是URI时才匹配,方法是将其package在^(行首)和$(行尾)符号中:

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

对于b),您可以将调用更改为URI.regexp(['http', 'https']),以限制允许的方案,这使您更加接近。也有一些针对此问题的工具,例如valid_url。或者,仅接受您的验证永远不会是完美的。