如何简单地验证字符串在 PHP 中是否为有效 IP?

2022-08-30 22:32:03

使用 PHP,如何验证字符串是否为有效 IP?

有效字符串的示例:

  • 192.158.5.95
  • 121.212
  • 12.12.12.204

无效字符串的示例:

  • 121
  • 10 12 12 (无点)

我当前的脚本使用此代码,但这不足以满足我的需求:

if(strpos($input, '.') !== false)
{    
  // There is a period 
} 
else 
{     
  // No Period 
} 

因此,有人可以建议我如何验证字符串是有效的IP吗?


答案 1

filter_var试试

例:

if(filter_var('127.0.0.1', FILTER_VALIDATE_IP) !== false) {
    // is an ip
} else {
    // is not an ip
}

如果您现在有类似 或类似的字符串,将返回 。像 这样的有效 IP 被视为有效。foo127.0.0.blafilter_varfalse10.1.10.10::1

通知

此外,您必须选中 ,因为返回值,如果它有效,如果它无效(例如 将返回,而不是)。!== falsefilter_varfalsefilter_var("::1", FILTER_VALIDATE_IP)::1true

标志

您还可以使用以下一些标志:

FILTER_FLAG_IPV4(IPV4 过滤器)

FILTER_FLAG_IPV6(IPV6 过滤器)

FILTER_FLAG_NO_PRIV_RANGE(禁止 IP 进入专用范围)

FILTER_FLAG_NO_RES_RANGE(禁止 IP 进入保留范围)

filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE)

如果 是 函数 将返回 。$ip127.0.0.1false

通知尴尬地是可以的,但不是。::1FILTER_FLAG_NO_PRIV_RANGE127.0.0.1


答案 2
$valid = ip2long($ip) !== false;

推荐