正規表現でIPアドレスを検証する(と、より良い方法)
正規表現はIPの形を照合できますが、本当の検証(範囲やIPv6の短縮)はパーサに任せる方が確実です。
IPv4の正規表現
各オクテットは0〜255:
^((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$
これだけでも煩雑で、IPv6の正規表現(:: 短縮や埋め込みIPv4を含む)はさらに複雑でミスしやすくなります。
パーサを使う
多くの言語は1行で正しく検証できます:
import ipaddress
def is_ip(s):
try: ipaddress.ip_address(s); return True
except ValueError: return False
ok := net.ParseIP(s) != nil
import net from "node:net";
const ok = net.isIP(s) !== 0; // 4, 6, 0 のいずれか
詳しくは IPプログラミング・サンプル集。
正規表現は素早い形式チェック専用に。「使えるアドレスか、許可範囲内か」を判定するならパーサ+CIDR判定を使いましょう。範囲の確認は サブネット計算機 が便利です。