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

chr*_*ris 18 php regex string validation

我需要为IPv4和v6创建一个函数,我也使用本地ip.

我所知道的是有效的IPv4范围从0.0.0.0到255.255.255.255我所知道的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的事情是我用正则表达式吮吸所以我不知道如何编写一个将验证v4或6的内容.此外,对上述函数概念的完整性检查也会很好.

Mor*_*gon 48

检查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.
Run Code Online (Sandbox Code Playgroud)

  • `$isValid` 是 __not__ `boolean`。从文档中:返回过滤后的数据,如果过滤失败则返回 FALSE。 (2认同)

Pau*_*aul 21

编辑

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

原始答案

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

function validateIP($ip){
    return inet_pton($ip) !== false;
}
Run Code Online (Sandbox Code Playgroud)

  • 小心!此函数将发出警告,请不要在函数名前使用@消除它.您应该避免使用此功能来检查正确的IP.正如@ marc-pro-campos指出的那样,选择`return filter_var($ ip,FILTER_VALIDATE_IP));`似乎对你最好 (2认同)

小智 11

尝试

//validates IPV4 and IPV6
$isValid = filter_var($ip, FILTER_VALIDATE_IP));

//validates IPV4
$isValid = filter_var($ip, FILTER_VALIDATE_IP,FILTER_FLAG_IPV4));

//validates IPV6
$isValid = filter_var($ip, FILTER_VALIDATE_IP,FILTER_FLAG_IPV6));
Run Code Online (Sandbox Code Playgroud)

http://www.php.net/manual/en/filter.filters.validate.php


Raf*_*shi 6

除了 Morgon 和 Mark Pro Campos 的回答之外:

function is_valid_ip($ip='', $ip_type=''){

    $isValid=false;

    if($ip_type=='ipv4'){

        //validates IPV4
        $isValid = filter_var($ip, FILTER_VALIDATE_IP,FILTER_FLAG_IPV4);
    }
    elseif($ip_type=='ipv6'){

        //validates IPV6
        $isValid = filter_var($ip, FILTER_VALIDATE_IP,FILTER_FLAG_IPV6);
    }
    else{

        //validates IPV4 and IPV6
        $isValid = filter_var($ip, FILTER_VALIDATE_IP);
    }

    if($isValid == $ip){

        $isValid=true;
    }

    return $isValid;
}
Run Code Online (Sandbox Code Playgroud)

资源

http://php.net/manual/en/function.filter-var.php