在C#中validationFQDN

有没有人有正则表达式来validation合法的FQDN?

现在,我使用这个正则表达式:

(?=^.{1,254}$)(^(?:(?!\d+\.|-)[a-zA-Z0-9_\-]{1,63}(?!-)\.?)+(?:[a-zA-Z]{2,})$) 

然而,当“aa.aa”有效时,此正则表达式导致“aa.a”无效。

有谁知道为什么?

这是一个较短的模式:

 (?=^.{1,254}$)(^(?:(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{2,})$) 

至于为什么模式将“aa.a”确定为无效而“aa.aa”为有效,这是因为{2,} – 如果你将2更改为1以便它是

 (?=^.{1,254}$)(^(?:(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{1,})$) 

它应该认为“aa.a”和“aa.aa”都是有效的。

 string pattern = @"(?=^.{1,254}$)(^(?:(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{1,})$)"; bool isMatch = Regex.IsMatch("aa.a", pattern); 

isMatch对我来说是正确的。

我认为这也可能是一个选项,特别是如果FQDN稍后将与System.Uri一起使用:

 var isWellFormed = Uri.CheckHostName(stringToCheck).Equals(UriHostNameType.Dns); 

请注意,此代码认为部分限定的域名格式正确。