2012-11-23 44 views
0

我想验证一个URL,所以我搜查,发现this验证URL域

布赖恩·雷在他的帖子说,

“@大老答案是很好的一个完整的URL,但如果你想要验证一个域列,你不想允许他的正则表达式允许的额外的URL位(例如,你绝对不希望允许一个URL到一个文件的路径)

所以我删除了协议,端口,文件路径和正则表达式的查询字符串部分,从而导致:“

我不明白他所说的。 URL如何成为文件的路径?什么是“域名专栏”?

+0

查看邮件底部的示例链接。 – ck3g

+1

使用正则表达式验证除简单URL之外的任何内容都会起到反作用。最好编写一个使用'URI.parse'的自定义验证。 –

+0

@DouglasFShearer你的意思是说,如果'URI.parse'不会引发'URI :: InvalidURIError',那么它是一个有效的URI? –

回答

3

一个URL由几部分组成。如果你有一个非常eleborate网址,如:

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

的部分是:

  • 协议:HTTP://
  • 主机名:WWW
  • 域名:example.com
  • 端口:1234
  • 文件路径:路径/到/ file.html
  • 查询字符串:KEY1 = v alue1 &键2 =值

可能不能省略的唯一部分是协议(但许多程序允许默认为http://)和主机名。每个部分都有自己的要求,规定其中的法律特征。更糟糕的是,并非所有的Web服务器都同意这些要求是什么。因此,只有在没有建立实际连接并查看失败的情况下才能检查,这是联系Web服务器所需的部分。这只是协议,主机和域名以及端口。这些都是不区分大小写的(其他可能不会)。我不确定主机或域名中的有效字符是什么,但这也是名称服务器可能与规范不一致的地方。

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

至于你的问题一个URL如何引用一个本地文件,有一个特殊的协议:file://。由于路径必须以/开头,因此这会导致像file:///home/user/file.html这样的网址,因此一开始就有三个斜杠。

+0

谢谢你,Bas Wijnen! –