我正在编写一些处理 URL 的代码,并且我想确保我不会遗漏一些奇怪的情况......
除了 AZ、0-9、“-”和“.”之外,主机是否有任何有效字符?
(这包括任何可以在子域中的东西,等等。基本上,在 :// 和第一个 / 之间的任何东西)
谢谢!
不,这是允许的
如果您想阅读,这里是一个参考: http ://www.ietf.org/rfc/rfc1034.txt
取决于您在哪个级别进行验证(在 URL 转义之前或之后)。如果您尝试验证用户输入,那么它可以超越 ASCII(带有大块 Unicode)。
请参阅http://en.wikipedia.org/wiki/Internationalized_domain_name
如果您在所有转义和“punycode”完成后尝试验证,验证没有意义,因为旧 RFC 已经保证只包含有效字符。
请记住,除了 Internet 的主机名规则之外,DNS 系统还可以自由创建他们喜欢的任何名称。DNS 服务器可以接受和回复 8 位二进制请求:DNS 有线协议不禁止它。
这意味着对于内部 LAN URL,您可能有不同的规则,例如主机名中出现下划线。
有效的 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 中查找它。
如果您想编写与官方 W3C 规范完美匹配的 URL 解析代码,请参阅 www.w3.org/TR/url-1/ 上的文档。有关 URL 中主机的具体信息,请参见第 3 节(主机)。