链接字段的自定义验证
问题描述:
我有一个具有link
属性的模型。链接属性可设置为外部网址例如:http://google.com
或引用内部页面,例如:/users/1
。链接字段的自定义验证
表格link
只是一个没有验证的文本字段。它用link_to "whatever", model.link
呈现。
有很多轨道URI验证的例子。但是,我没有发现也没有考虑相关路径。我正在考虑使用正则表达式,但想知道是否有更好的方法来设置一个link
属性,它可以处理外部(http/https)和内部(/ users/1,/ locations,/ whatever/1/something/2)路径。
http://www.google.com
https://www.google.com
http://www.google.com?something=blah
http://www.google.com/thing/test/
/locations
/locations/1
/products/1/skus/4
"" (e.g. blank)
例子
例子
www.google.com
google.com
products/2
htt://
编辑
如果有更好的,完全不同解决这个问题我对此也持开放态度。
答
因为只有管理员会使用这个申请我只需要最低验证,以确保输入了正确的前缀(这样一个角色是不小心错过了),我结束了这是怎么回事:
validates :link, :format => /(^$)|(^(http:\/\/|https:\/\/|\/))/ix
如果有人有更好的解决方案,我愿意改变它。
根据您对参考网址的要求,正则表达式将不够用。 (如果用户放置/谷歌会发生什么?)会建议为所有网址制定一套统一的规则。 – rb512
它不一定非常严格。这个工具只能由管理员访问,所以我只是想要达到最低限度的验证。如果他们输入了'/ google',那么它会想要一个不存在的页面并将其重定向到404。我想要完成的是确保管理员遵循正确的格式,并且不会意外地错过斜线或者其他的东西。 –