私は正規表現に慣れていないので、_preg_match
_関数を使用して、文字列がIPアドレスであるかどうかを確認します。
たとえば、_$string = "45.56.78.222"
_またはそのようなものの場合、preg_match($regex, $string)
はtrueを返す必要があります。それで、_$regex
_はどうあるべきでしょうか?
必要がないときは正規表現を使用しないでください:)
$valid = filter_var($string, FILTER_VALIDATE_IP);
本当に正規表現が必要な場合は...
$valid = preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/', $string);
ただし、正規表現は形式のみを検証し、オクテットの最大値は符号なしバイトの最大値、または255
。
これがIPv6が必要な理由です-IPv4アドレスは32ビット長で、インターネットは人気があります:)
/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
あなたの例で行う必要があります(これにはnot IPアドレスである文字列が含まれます)。そしてもちろん、それはただのIPv4アドレスです。
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
これにより、範囲が4のいずれかから255よりも大きいかどうかなど、完全な範囲がチェックされます。