在Rails中验证URL域

时间:2012-11-23 16:31:00

标签: ruby-on-rails regex validation url

我想验证网址,因此我搜索并找到this

Brian Ray在他的帖子中说

" @ Tate的答案适用于完整的网址,但是如果您想验证域列,则不希望允许其正则表达式允许的额外URL位(例如,您绝对不想允许带有文件路径的URL。

所以我删除了正则表达式的协议,端口,文件路径和查询字符串部分,结果如下:"

我根本不明白他说的话。 URL如何成为文件的路径?什么是"域名栏"?

1 个答案:

答案 0 :(得分:3)

网址由多个部分组成。如果您有一个非常精简的网址,例如:

http://www.example.com:1234/path/to/file.html?key1=value1&key2=value2

部分是:

  • 协议:http://
  • 主持人姓名:www
  • 域名:example.com
  • port:1234
  • 文件路径:path / to / file.html
  • 查询字符串:key1 = value1& key2 = value2

唯一可能没有省略的部分是协议(但许多程序允许默认为http://)和主机名。每个部分对其中的合法字符都有自己的要求。更糟糕的是,并非所有的Web服务器都同意这些要求是什么。因此,唯一可以检查而不进行实际连接并查看是否失败的是联系Web服务器所需的部分。这只是协议,主机和域名以及端口。这些都是不区分大小写的(其余可能不是)。我不确定主机或域名中的有效字符是什么,但这也是名称服务器可能不符合规范的内容。

简而言之,检查URL是否有效的唯一方法是尝试建立URL连接。如果你的程序使用一些法术来拒绝URL(或电子邮件地址),有些人会讨厌你和/或他们的互联网提供商(因为即使你的检查遵循规范,一些主机或域名也没有)。

关于URL如何引用本地文件的问题,有一个特殊的协议:file://。由于路径必须以/开头,因此会生成file:///home/user/file.html之类的网址,因此在开头会有三个斜杠。