PHP 函数,用于使用正则表达式验证 IPv4 和 IPv6

2022-08-30 18:39:01

我需要为IPv4和v6创建一个函数,我也会导致使用本地IP。

我所知道的是从0.0.0.0到255.255.255.255的有效IPv4范围,我对IPv6的了解是有限的,但是尽管它已经存在了一段时间,但直到今天我才真正研究过它。但我想将来证明我正在制作的功能,同时暂时保持它有点复古。我不确定IPv6的有效范围是多少。

无论如何,总的来说,我所想的是一个功能,其程度是

function validateIP($ip, $vSix = NULL)
{
    if($vSix !== NULL)
    {
      if(preg_match([regex-to-validate-ipv6], $ip))
      {
        return true;
      }
      else
      {
        return false;
      }
    }

    if(preg_match([regex-to-validate-ipv4], $ip))
    {
      return true;
    }
    else
    {
      return false;
    }
}

我的事情是,我用正则表达式很糟糕,所以我不知道如何编写一个可以验证v4或6的正则表达式。此外,对上述功能概念进行健全性检查也会很好。


答案 1

检查 PHP 的filter_var函数。它有许多验证器,包括IPv4和IPv6。

$isValid = filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4);
// $isValid can be evaluated as boolean, as it's FALSE if validation fails.

答案 2

编辑

请参阅Natxet对此答案的评论,以及Morgon的答案以获得更好的解决方案。

原始答案

你可以只使用inet_pton。如果 IP 不是有效的 IPv6 或 IPv4,则返回 false:

function validateIP($ip){
    return inet_pton($ip) !== false;
}

推荐