跟随Regular expression to match hostname or IP Address?并使用Restrictions on valid host names作为参考,在Python中匹配/验证主机名/fqdn(完全限定域名)的最易读、最简洁的方法是什么?我已经在下面用我的尝试回答了,欢迎改进。
发布于 2010-03-28 16:52:51
import re
def is_valid_hostname(hostname):
if len(hostname) > 255:
return False
if hostname[-1] == ".":
hostname = hostname[:-1] # strip exactly one dot from the right, if present
allowed = re.compile("(?!-)[A-Z\d-]{1,63}(?<!-)$", re.IGNORECASE)
return all(allowed.match(x) for x in hostname.split("."))确保每个数据段
允许的characters
它还避免了双重否定(not disallowed),如果hostname以.结尾,也没问题。如果hostname以多个点结束,它将(也应该)失败。
发布于 2020-01-28 21:13:36
不要重复发明轮子。您可以使用库,例如验证器。或者,您可以复制their code
安装
pip install validators用法
import validators
if validators.domain('example.com')
print('this domain is valid')发布于 2015-10-19 20:29:14
这是一个更严格的Tim Pietzcker's answer版本,有以下改进:
[0-9]而不是\d).import re
def is_valid_hostname(hostname):
if hostname[-1] == ".":
# strip exactly one dot from the right, if present
hostname = hostname[:-1]
if len(hostname) > 253:
return False
labels = hostname.split(".")
# the TLD must be not all-numeric
if re.match(r"[0-9]+$", labels[-1]):
return False
allowed = re.compile(r"(?!-)[a-z0-9-]{1,63}(?<!-)$", re.IGNORECASE)
return all(allowed.match(label) for label in labels)https://stackoverflow.com/questions/2532053
复制相似问题