正当な 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
私にとってはTRUEです。
特に FQDN が後で System.Uri と共に使用される場合、これもオプションになる可能性があると思います。
var isWellFormed = Uri.CheckHostName(stringToCheck).Equals(UriHostNameType.Dns);
このコードでは、部分的に修飾されたドメイン名が適切な形式であると見なされることに注意してください。