我正在编写一些处理网址的代码,我想确保我不会遗漏一些奇怪的案例......
除了A-Z,0-9,“ - ”和“。”以外的主机是否有任何有效字符?
(这包括可以在子域中的任何东西,等等。基本上,在//和第一个/之间的任何东西
谢谢!
答案 0 :(得分:25)
请参阅Restrictions on valid host names:
主机名由一系列组成 与点串联的标签,如同 所有域名1。例如, “en.wikipedia.org”是主机名。每 标签必须介于1到63之间 字符长,整个 hostname最多为255 字符。
RFC要求主机名的标签 可能只包含ASCII字母'a' 通过'z'(不区分大小写), 数字'0'到'9',和 连字符。主机名标签无法启动 或以连字符结尾。没有其他 符号,标点符号或 允许使用空格。
答案 1 :(得分:3)
不,这就是所有允许的
如果你想阅读,这里有一个参考: http://www.ietf.org/rfc/rfc1034.txt
答案 2 :(得分:3)
取决于您进行验证的级别(在URL转义之前或之后)。 如果您尝试验证用户输入,那么它可以超越ASCII(使用大块Unicode)。
请参阅http://en.wikipedia.org/wiki/Internationalized_domain_name
如果在完成所有转义和“punycode”之后尝试验证,则验证没有意义,因为已经保证旧RFC只包含有效字符。
答案 3 :(得分:1)
请记住,除了Internet的主机名规则外,DNS系统还可以自由创建他们喜欢的任何名称。 DNS服务器可以接受并回复8位二进制请求:DNS有线协议不禁止它。
这意味着对于内部LAN URL,您可能有不同的规则,例如主机名中出现的下划线。
答案 4 :(得分:0)
如果您想编写与官方W3C规范完全匹配的URL解析代码,请参阅www.w3.org/TR/url-1/上的文档。有关URL中主机的特定信息,请参阅第3节(主机)。
答案 5 :(得分:0)
有效的URL主机包括ascii字母,数字,最大长度为255的点(。)和连字符(-),以及最大长度为63的点分隔标签。连字符可以分隔字母数字序列,例如one-two.net,但不能出现在点分隔标签的开头或结尾,例如-one.two.com,one.two.com-或one-.two.com是无效的主机。
请参见https://tools.ietf.org/html/rfc1123#page-79的https://tools.ietf.org/html/rfc952和假设的第1部分
这也是指向在线正则表达式工具的链接,以验证URL主机,该主机自2019年5月28日起https://www.regextester.com/23
此外,在验证引用https://tools.ietf.org/html/rfc1123#page-13的主机时,您应先在语法上检查主机的点分十进制数,然后再在DNS中查找它。