20

我正在编写一些处理 URL 的代码,并且我想确保我不会遗漏一些奇怪的情况......

除了 AZ、0-9、“-”和“.”之外,主机是否有任何有效字符?

(这包括任何可以在子域中的东西,等等。基本上,在 :// 和第一个 / 之间的任何东西)

谢谢!

4

6 回答 6

35

请参阅对有效主机名的限制

主机名由一系列用点连接的标签组成,所有域名1也是如此。例如,“en.wikipedia.org”是一个主机名。每个标签的长度必须介于 1 到 63 个字符之间,并且整个主机名最多包含 255 个字符。

RFC 要求主机名的标签只能包含 ASCII 字母“a”到“z”(不区分大小写)、数字“0”到“9”和连字符。主机名标签不能以连字符开头或结尾。不允许使用其他符号、标点符号或空格。

于 2009-07-15T19:26:28.277 回答
5

不,这是允许的

如果您想阅读,这里是一个参考: http ://www.ietf.org/rfc/rfc1034.txt

于 2009-07-15T19:25:04.737 回答
5

取决于您在哪个级别进行验证(在 URL 转义之前或之后)。如果您尝试验证用户输入,那么它可以超越 ASCII(带有大块 Unicode)。

请参阅http://en.wikipedia.org/wiki/Internationalized_domain_name

如果您在所有转义和“punycode”完成后尝试验证,验证没有意义,因为旧 RFC 已经保证只包含有效字符。

于 2009-07-16T05:50:38.910 回答
1

请记住,除了 Internet 的主机名规则之外,DNS 系统还可以自由创建他们喜欢的任何名称。DNS 服务器可以接受和回复 8 位二进制请求:DNS 有线协议不禁止它。

这意味着对于内部 LAN URL,您可能有不同的规则,例如主机名中出现下划线。

于 2012-11-12T19:29:20.533 回答
1

有效的 URL 主机包括 ascii 字母、数字、点 (.) 和连字符 (-),最大长度为 255,点分隔标签的最大长度为 63。连字符可以分隔字母数字序列,例如 one-two.net,但不能出现在点分隔标签的开头或结尾,例如 -one.two.com、one.two.com- 或 one-.two.com 是无效的主机。

请参阅https://www.rfc-editor.org/rfc/rfc1123#page-79和https://www.rfc-editor.org/rfc/rfc952的假设第 1 部分

这也是一个在线正则表达式工具的链接,用于验证自 2019 年 5 月 28 日起工作的 URL 主机https://www.regextester.com/23

此外,在验证引用https://www.rfc-editor.org/rfc/rfc1123#page-13的主机时,您应该先在语法上检查主机的点分十进制数字,然后再在 DNS 中查找它。

于 2019-05-28T23:39:29.160 回答
0

如果您想编写与官方 W3C 规范完美匹配的 URL 解析代码,请参阅 www.w3.org/TR/url-1/ 上的文档。有关 URL 中主机的具体信息,请参见第 3 节(主机)。

于 2015-07-29T19:05:11.697 回答