6

正当な FQDN を検証するための正規表現を持っている人はいますか?

今、私はこの正規表現で使用します:

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

ただし、この正規表現では、「aa.aa」は有効ですが、「aa.a」は有効ではありません。

誰かが理由を知っていますか?

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私にとってはTRUEです。

于 2011-02-06T09:39:28.183 に答える
4

特に FQDN が後で System.Uri と共に使用される場合、これもオプションになる可能性があると思います。

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

このコードでは、部分的に修飾されたドメイン名が適切な形式であると見なされることに注意してください。

于 2016-03-29T22:42:03.397 に答える