正则表达式匹配IP地址

ibr*_*him 42 php regex string ip preg-match

我是正则表达式的新手,我想使用preg_match函数来查找字符串是否是IP地址.

例如if $string = "45.56.78.222"或类似的东西,preg_match($regex, $string)应该返回true.那$regex应该是什么?

ale*_*lex 120

当你不需要:)时不要使用正则表达式

$valid = filter_var($string, FILTER_VALIDATE_IP);
Run Code Online (Sandbox Code Playgroud)

虽然如果你真的想要一个正则表达式......

$valid = preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/', $string);
Run Code Online (Sandbox Code Playgroud)

然而,正则表达式只会验证格式,任何八位字节的最大值是无符号字节的最大值,或者255.

这就是为什么IPv6是必要的 - 一个IPv4地址只有32位长,互联网很受欢迎:)

  • 以获得良好的IP正则表达式> http://stackoverflow.com/questions/9165922/regex-for-ip-address/20270082#20270082 (2认同)
  • 或者 `$valid = (filter_var($string, FILTER_VALIDATE_IP) !== false);` 如果你严格想要一个布尔值。 (2认同)

Tim*_*ker 9

/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
Run Code Online (Sandbox Code Playgroud)

应该为您的示例(它包含不是 IP地址的字符串).当然,它只是一个IPv4地址.


小智 5

/^(?:(?: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]?)$/ 
Run Code Online (Sandbox Code Playgroud)

这将检查完美范围,包括范围是否高于255中的任何一个.