我需要为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;
}
}
我的事情是我用正则表达式吮吸所以我不知道如何编写一个将验证v4或6的内容。此外,对上述函数概念的完整性检查也会很好。
答案 0 :(得分:47)
检查PHP的filter_var
功能。它有一个number of validators,包括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.
答案 1 :(得分:20)
修改强>
请参阅Natxet对此答案的评论,以及Morgon对更好解决方案的回答。
原始答案
您可以使用inet_pton。如果IP不是有效的IPv6或IPv4,则返回false:
function validateIP($ip){
return inet_pton($ip) !== false;
}
答案 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));
答案 3 :(得分:2)
您可能需要检查filter_var。它有一个IP地址过滤器(IPv4和IPv6):http://us.php.net/manual/en/filter.filters.validate.php
答案 4 :(得分:2)
尝试:
的IPv4
/^((2[0-4]|1\d|[1-9])?\d|25[0-5])(\.(?1)){3}\z/
的IPv6
/^(((?=(?>.*?(::))(?!.+\3)))\3?|([\dA-F]{1,4}(\3|:(?!$)|$)|\2))(?4){5}((?4){2}|((2[0-4]|1\d|[1-9])?\d|25[0-5])(\.(?7)){3})\z/i
答案 5 :(得分:1)
除了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;
}
<强>资源强>
答案 6 :(得分:0)
好吧,我知道这个问题是针对php的,而不是laravel。
但是为了完整起见,我将发布php laravel解决方案。 要检查有效的ipv4或ipv6地址,请使用以下代码作为验证规则数组中的值:
// form fieldname to be checked => 'rules ip-separated'
'field1' => 'required|ipv4', // checks for an ipv4 address + field is required
'field2' => 'nullable|ipv4', // checks for an ipv6 address + an empty string is valid as well