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)
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)
小智 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
除了 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