生活中咱們確定會見到不少域名(domain name,簡稱domain)。域名有不少形式,以句點(.)做爲分隔符。這裏說的域名是純域名,不是網址,不包括http://(或https://),也不帶斜線。python
1. 由兩個部分組成,例如baidu.com(百度),csdn.net(CSDN),wikipedia.org(維基百科)。git
2. 由多個部分組成,例如en.wikipedia.org(英文維基百科),support.google.com(Google幫助頁面),info.cern.ch(世界上的第一個網站),acm.hdu.edu.cn(HDU Online Judge)。dom
1. 最後一部分是頂級域名(top-level domain),頂級域名不能隨便取,只能是有限的頂級域名之一。網站
2. 域名中只能包含數字、字母和連字符(好像每一個域名要求還不一樣)。google
以'.'爲分隔符,將域名分紅幾個部分,最後一部分必須是合法的頂級域名,其它部分不得包含非字母、數字和連字符。實際上還能夠包含中文(Unicode字符),這裏不考慮。.net
因爲域名衆多,直接寫在代碼中不方便,因而將域名存在文件裏(不帶.號):code
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 zwblog
把文件命名爲domains.txt,而且可能須要把它添加到PYTHONPATH。ip
Python代碼:ci
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(' |\n', 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」。