Функция PHP для проверки IPv4 и IPv6 с использованием regex
Мне нужно создать функцию для 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. Также неплохо было бы проверить здравый смысл на вышеупомянутой концепции функций.
Ответы
Ответ 1
Edit
Пожалуйста, см. комментарий Natxet на этот ответ, и Morgon ответит за лучшее решение.
Оригинальный ответ
Вы можете просто использовать inet_pton. Он возвращает false, если IP не является допустимым IPv6 или IPv4:
function validateIP($ip){
return inet_pton($ip) !== false;
}
Ответ 2
Проверьте PHP filter_var
. Он имеет количество валидаторов, включая IPv4 и IPv6.
$isValid = filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4);
// $isValid can be evaluated as boolean, as it FALSE if validation fails.
Ответ 3
попробовать
//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));
http://www.php.net/manual/en/filter.filters.validate.php
Ответ 4
Вместо этого вы можете проверить на filter_var. Он имеет фильтр для IP-адресов (IPv4 и IPv6): http://us.php.net/manual/en/filter.filters.validate.php
Ответ 5
Try:
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
С:
http://home.deds.nl/~aeron/regex/
Ответ 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;
}
Ресурсы
http://php.net/manual/en/function.filter-var.php