2024-03-29 08:07:55 发布
网友
任何域名都是有效的(语法上)如果它是一个点分隔的标识符列表,每个不超过63个字符,由字母、数字和破折号(没有下划线)组成。
所以:
r'[a-zA-Z\d-]{,63}(\.[a-zA-Z\d-]{,63})*'
会是个开始。当然,现在可能允许使用一些非Ascii字符(这是一个非常新的开发),这会极大地改变参数——您需要处理这个问题吗?
注意,虽然您可以使用正则表达式执行操作,但测试有效域名的最可靠的方法是实际尝试解析该名称(使用socket.getaddrinfo):
from socket import getaddrinfo result = getaddrinfo("www.google.com", None) print result[0][4]
请注意,从技术上讲,这会让您对DoS开放(如果有人提交了数千个无效域名,则可能需要一段时间才能解析无效名称),但您可以简单地对尝试此操作的人进行评分限制。
这样做的好处是,它会将“hotmail.con”捕获为无效(而不是“hotmail.com”,比方说),而正则表达式会将“hotmail.con”捕获为有效。
r'^(?=.{4,255}$)([a-zA-Z0-9][a-zA-Z0-9-]{,61}[a-zA-Z0-9]\.)+[a-zA-Z0-9]{2,5}$'
a.in
任何域名都是有效的(语法上)如果它是一个点分隔的标识符列表,每个不超过63个字符,由字母、数字和破折号(没有下划线)组成。
所以:
会是个开始。当然,现在可能允许使用一些非Ascii字符(这是一个非常新的开发),这会极大地改变参数——您需要处理这个问题吗?
注意,虽然您可以使用正则表达式执行操作,但测试有效域名的最可靠的方法是实际尝试解析该名称(使用socket.getaddrinfo):
请注意,从技术上讲,这会让您对DoS开放(如果有人提交了数千个无效域名,则可能需要一段时间才能解析无效名称),但您可以简单地对尝试此操作的人进行评分限制。
这样做的好处是,它会将“hotmail.con”捕获为无效(而不是“hotmail.com”,比方说),而正则表达式会将“hotmail.con”捕获为有效。
a.in
)和最多255个字符相关问题 更多 >
编程相关推荐