一个合法的域名是形如"..abcde"的字符串,由"."分隔成为2~4段,其中每一段由英文字母、数字或者下划线组成,不允许包含其它字符,下面都是一些合法的域名:
www.baidu.com,www.163.com,www.sina.com.cn,noi.org,www.people.com.cn,v.hao123.baidu.com
下面是非法的域名:
www ,www.v.hao123.baidu.com, www . baidu ., www . baidu #hao.com,yeyou.chuanqu.com- new -g408
请编程判断给定的字符串是否是形式上合法的域名。
题目中先给出一个整型数 n (1≤ n ≤50),表示后面有 n 行字符串需要判断。随后的 n 行中,每行一个字符串,需要进行合法性判断。对于合法的字符串,应输出" Y ",否则输出" N ",结果中间不用空格。
from urllib.parse import urlparse
def is_valid_domain(domain):
try:
result = urlparse('http://' + domain)
return all([result.scheme, result.netloc])
except ValueError:
return False
domain = input("请输入域名: ")
if is_valid_domain(domain):
print("Y")
else:
print("N")
import re
n = int(input()) # 读入一个整数 n,表示有 n 行字符串需要判断
for _ in range(n):
domain = input() # 读入一行字符串
segments = domain.split('.') # 按照 "." 分隔字符串
if len(segments) < 2 or len(segments) > 4: # 判断分隔后的段数是否在 2 到 4 之间
print("N") # 如果不在,则输出 "N"
continue
valid = True # 假设字符串是合法的
for segment in segments: # 遍历每一段
if not re.match(r'^[a-zA-Z0-9_]+$', segment): # 判断每一段是否都是由英文字母、数字或下划线组成
valid = False # 如果不是,则将 valid 设为 False
break
print("Y" if valid else "N") # 如果 valid 为 True,则输出 "Y",否则输出 "N"