web-dev-qa-db-ja.com

IPアドレスに一致する正規表現

私は正規表現に慣れていないので、_preg_match_関数を使用して、文字列がIPアドレスであるかどうかを確認します。

たとえば、_$string = "45.56.78.222"_またはそのようなものの場合、preg_match($regex, $string)はtrueを返す必要があります。それで、_$regex_はどうあるべきでしょうか?

41
ibrahim

必要がないときは正規表現を使用しないでください:)

$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ビット長で、インターネットは人気があります:)

118
alex
/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/

あなたの例で行う必要があります(これにはnot IPアドレスである文字列が含まれます)。そしてもちろん、それはただのIPv4アドレスです。

9
Tim Pietzcker
/^(?:(?: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よりも大きいかどうかなど、完全な範囲がチェックされます。

5
JackSparrow