0

我想验证一个 URL,所以我搜索并找到了这个

Brian Ray 在他的帖子中说

“@Tate 的回答对于完整的 URL 来说是很好的,但是如果你想验证一个域列,你不想允许他的正则表达式允许的额外 URL 位(例如,你绝对不想允许带有路径的 URL到一个文件)。

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

我完全不明白他说了什么。URL如何成为文件的路径?什么是“域列”?

4

1 回答 1

3

一个 URL 由几个部分组成。如果您有一个非常精致的 URL,例如:

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

零件是:

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

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

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

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

于 2012-11-24T08:46:39.083 回答