1. ホーム
  2. regex

[解決済み] DNSホスト名またはIPアドレスにマッチする正規表現?

2022-03-24 16:57:48

質問

誰か、合法的なDNSホスト名やIPアドレスにマッチするような正規表現をお持ちではないですか?

95%の確率で動作するものを書くのは簡単ですが、DNSホスト名に関する最新のRFC仕様に正確に一致するよう、よくテストされたものを希望しています。

どのように解決するのか?

以下の正規表現を個別に、または組み合わせて合同でOR表現として使用することができます。

ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";

ValidHostnameRegex = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$";

ValidIpAddressRegex は有効なIPアドレスにマッチし ValidHostnameRegex 有効なホスト名です。使用する言語によっては、"escape "で "escape "しなければならない場合があります。


ValidHostnameRegex は以下のように有効です。 RFC 1123 . 元々 RFC 952 は、ホスト名のセグメントが数字で始まってはいけないと規定しています。

http://en.wikipedia.org/wiki/Hostname

の本来の仕様である でのホスト名 RFC 952 , は、ラベルの開始を禁止することを義務付けました。 数字またはハイフン、および ハイフンで終わらせてはならない。しかし その後の仕様( RFC 1123 ) は、ホスト名ラベルの開始を許可しています。 を数字で表す。

Valid952HostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$";