6

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

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

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

但是,此正则表达式导致“aa.a”无效,而“aa.aa”有效。

有谁知道为什么?

4

2 回答 2

4

这是一个较短的模式:

(?=^.{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对我来说是真的。

于 2011-02-06T09:39:28.183 回答
4

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

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

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

于 2016-03-29T22:42:03.397 回答