我正在使用Python,并希望一个简单的API或正则表达式来检查域名的有效性。根据有效性,我是句法上的有效性,而不是域名是否确实存在于互联网上。检查字符串中的有效域名?
回答
如果是一个以点分隔的标识符列表(每个标签不超过63个字符),并且由字母,数字和破折号(无下划线)组成,则任何域名都是(语法上)有效的。
所以:
r'[a-zA-Z\d-]{,63}(\.[a-zA-Z\d-]{,63})*'
将是一个开端。当然,现在可能会允许一些非Ascii字符(最近的一次开发),这会改变参数 - 你需要处理这些吗?
r'^(?=.{4,255}$)([a-zA-Z0-9][a-zA-Z0-9-]{,61}[a-zA-Z0-9]\.)+[a-zA-Z0-9]{2,5}$'
- 先行确保它具有最小的4(
a.in
)和长度之间1〜63个,最多255个字符 - 一个或多个标签(由句点分隔),开始和结束带有字母数字字符,并在中间包含字母数字字符和连字符。
- 随之而来的是顶级域名(博物馆,其最大长度为5)
这不能存储punycode。Th e最短的西里尔文脚本双字母顶级域是punycode中的6个字母。 – kaleissin 2013-03-21 11:08:21
博物馆是6个字符,而不是5个。 – 2013-10-29 00:49:18
对预期的TLD长度进行硬编码是一个糟糕的主意,尤其是现在IDN TLD正在编码出来并因此出现比5更长的时间。 – 2015-01-16 17:11:58
请注意,虽然你可以做东西正则表达式来测试有效的域名最可靠方式是实际尝试解析名称(以socket.getaddrinfo):
from socket import getaddrinfo
result = getaddrinfo("www.google.com", None)
print result[0][4]
注意,从技术上这可以让你开到DOS(如果有人提出无效域名数千个,这可能需要一段时间来解决无效南es),但你可以简单地限制某人尝试这一点。
这样做的好处是它会将“hotmail.con”视为无效(而不是“hotmail.com”),而正则表达式会说“hotmail.con”有效。
我一直在使用这样的:
(r'(\.|\/)(([A-Za-z\d]+|[A-Za-z\d][-])+[A-Za-z\d]+){1,63}\.([A-Za-z]{2,3}\.[A-Za-z]{2}|[A-Za-z]{2,6})')
,确保其符合或者点后(WWW)或/(HTTP://)和破折号仅发生名称内,以符合这样的后缀作为gov.uk也是。
在这一点上,答案都与规范相当过时。我相信下面将正确匹配当前的规格:
r'^(?=.{1,253}$)(?!.*\.\..*)(?!\..*)([a-zA-Z0-9-]{,63}\.){,127}[a-zA-Z0-9-]{1,63}$'
- 1. 检查UTF16字符串中的所有字符是否有效?
- 2. 检查替换字符串是有效
- 3. 检查字符串是否有效
- 4. 检查域名有效性的Api
- 5. 如何检查查询字符串中的ID是否有效?
- 6. Grails域名字符串查询查询
- 7. 有效检查字符?
- 8. 检查两个有效的URL和有效的域名
- 9. C#安全性:检查查询字符串有效的.pdf文件名
- 10. 检查PHP字符串中的无效字符
- 11. 如何检查bash中的有效字符串输入?
- 12. 检查elixir中字符串的有效性
- 13. 在Python中检查有效的utf8字符串
- 14. 检查JSONPath字符串是否在C#中有效
- 15. 如何检查文件字符串路径在java中有效
- 16. 检查字符串中的字符
- 17. C++检查,如果字符串具有有效的UTF-8字符
- 18. Java的检查,如果字符串是有效的文件
- 19. 检查字符串的子字符串
- 20. cpp检查字符串是否是有效的域名?作为标题提到的
- 21. 有效检查一个字符串是否包含另一个字符串
- 22. 更换域名字符串
- 23. Jquery或JS:如何检查字符串上的无效字符?
- 24. 如何检查字符串是否是有效的HTTP URL?
- 25. 如何检查给定的字符串是否有效月份?
- 26. 检查字符串是否包含有效的Python代码
- 27. 如何检查一个有效的Base64编码字符串
- 28. 如何检查是字符串有效的JavaScript?
- 29. 如何检查日期字符串的有效性?
- 30. 使用正则表达式检查字符串的有效性
为什么?如果这是电子邮件,则应通过为MX记录执行DNS查询来检查真实有效性,而不是通过regexp进行检查。 – Kimvais 2010-05-24 05:33:56
不是。查找已知无效名称没有任何好处,这只是浪费时间和资源。另外,您不需要MX记录来发送电子邮件,A记录就足够了。 – Synchro 2012-03-22 09:50:54
似乎它已经讨论[这里](http://stackoverflow.com/questions/1128168/validation-for-url-domain-using-regex-rails)。 – Incognito 2010-05-24 05:28:44