zoukankan      html  css  js  c++  java
  • 判断一个域名是否合法

    生活中我们肯定会见到很多域名(domain name,简称domain)。域名有很多形式,以句点(.)作为分隔符。这里说的域名是纯域名,不是网址,不包括http://(或https://),也不带斜线。

    常见的域名形式

    1. 由两个部分组成,例如baidu.com(百度),csdn.net(CSDN),wikipedia.org(维基百科)。

    2. 由多个部分组成,例如en.wikipedia.org(英文维基百科),support.google.com(Google帮助页面),info.cern.ch(世界上的第一个网站),acm.hdu.edu.cn(HDU Online Judge)。

    共同特征

    1. 最后一部分是顶级域名(top-level domain),顶级域名不能随便取,只能是有限的顶级域名之一。

    2. 域名中只能包含数字、字母和连字符(好像每个域名要求还不同)。

    判断方法

    以'.'为分隔符,将域名分成几个部分,最后一部分必须是合法的顶级域名,其它部分不得包含非字母、数字和连字符。实际上还可以包含中文(Unicode字符),这里不考虑。

    代码

    由于域名众多,直接写在代码中不方便,于是将域名存在文件里(不带.号):

    com org net int edu gov mil arpa
    ac ad ae af ag ai al am an ao aq ar as at aw ax az
    ba bb bd be bf bg bh bi bj bl bm bn bo bq br bs bt bv bw by bz
    ca cc cd cf cg ch ci ck cl cm cn co cr cu cv cw cx cy cz
    de dj dk dm do dz
    ec ee eg eh er es et eu
    fi fj fk fm fo fr
    ga gb gd ge gf gg gh gi gm gn gp gq gr gs gt gu gw gy
    hk hm hn hr ht hu
    id ie il im in io iq ir is it
    je jm jo jp
    ke kg kh ki km kn kp kr kw ky kz
    la lb lc li lk lr ls lt lu lv ly
    ma mc md me mf mg mh mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz
    na nc ne nf ng ni nl no np nr nu nz
    om
    pa pe pf pg ph pk pl pm pn pr ps pt pw py
    qa
    re ro rs ru rw
    sa sb sc sd se sg sh si sj sk sl sm sn so sr ss st su sv sx sy sz
    tc td tf tg th tj tk tl tm tn to tp tr tt tv tw tz
    ua ug uk um us uy uz
    va vc ve vg vi vn vu
    wf ws
    ye yt
    za zm zw

    把文件命名为domains.txt,并且可能需要把它添加到PYTHONPATH。

    Python代码:

    def isValidDomainChar(ch):
        return ch.isalpha() or ch.isdigit() or ch == '-'
    
    def isValidDomainSect(sect):
        return len(sect) > 0 and all(isValidDomainChar(ch) for ch in sect)
    
    def areValidDomainSects(sects):
        return all(isValidDomainSect(sect) for sect in sects)
    
    def isValidDomain(domain):
        sects = domain.split('.')
        global TLDS
        return areValidDomainSects(sects[0:-1]) and sects[-1] in TLDS
    
    def main():
        with open('domains.txt', 'r') as f:
            import re
            global TLDS
            TLDS = re.split(' |
    ', f.read())
        domain = input('Enter a domain: ')
        while domain != '':
            if isValidDomain(domain):
                print('Domain valid.')
            else:
                print('Domain invalid.')
            domain = input('Enter a domain: ')
    
    TLDS = []
    if __name__ == '__main__':
        main()
    

    注意需要将domains.txt所在目录添加到PYTHONPATH。另外,顶级域名有很多,domains.txt里只列出了一部分,还有很多。具体的可以在Wiki上搜“Top-level domains”。

  • 相关阅读:
    简练软考知识点整理-项目定义活动过程
    简练软考知识点整理-规划进度管理
    简练软考知识点整理-控制范围
    软考考前注意事项
    简练软考知识点整理-确认范围管理
    数据库之表关系
    数据库引擎
    数据库概念
    IO模型
    异步回调,线程队列,协程
  • 原文地址:https://www.cnblogs.com/collectionne/p/6979510.html
Copyright © 2011-2022 走看看