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

Har*_*rsh 13 php validation

使用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 
} 
Run Code Online (Sandbox Code Playgroud)

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

the*_*NaD 38

尝试使用filter_var

例:

if(filter_var('127.0.0.1', FILTER_VALIDATE_IP) !== false) {
    // is an ip
} else {
    // is not an ip
}
Run Code Online (Sandbox Code Playgroud)

如果你现在有一个字符串像foo,127.0.0.bla或类似的,filter_var将返回false.IP地址有效像10.1.10.10,::1被视为有效.

注意

此外,你必须检查!== false,因为它filter_var返回值,如果它是有效的,false如果它不是(例如filter_var("::1", FILTER_VALIDATE_IP)将返回::1,不是 true).

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

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.1该功能将返回false.

通知笨拙::1是确定的FILTER_FLAG_NO_PRIV_RANGE,但127.0.0.1并非如此.

  • 自从我发现 filter_var 我不想错过它。这是验证 IP、电子邮件地址等的可靠方法(据我所知)。 (2认同)

zer*_*kms 26

$valid = ip2long($ip) !== false;
Run Code Online (Sandbox Code Playgroud)

  • @Ozh:`200`实际上是技术上有效的IP地址`0.0.0.200`.有一些限制不允许你在现实生活中使用它(像很多其他的一样),但它仍然是一个有效的IP (3认同)
  • @para:为什么它不是有效的IP?它****是有效的IP.谢谢你的downvote.当你意识到自己错了 - 请撤消它.谢谢.PS:即使`2130706433`是一个有效的IP,试着ping它.PPS:如果你仍然不相信 - 打开http:/ 0313.109.178.99并看到它是一个谷歌 (2认同)