Функция 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. Также разумная проверка на вышеприведенную функциональную концепцию также будет приятной.

Solutions Collecting From Web of "Функция PHP для проверки IPv4 и IPv6 с использованием regex"

редактировать

Пожалуйста, см. Комментарий Natxet на этот ответ, и ответ Моргона для лучшего решения.

Оригинальный ответ

Вы можете просто использовать inet_pton . Он возвращает false, если IP не является допустимым IPv6 или IPv4:

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

Проверьте функцию filter_var PHP. Он имеет несколько валидаторов , включая 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. 

пытаться

 //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

Вместо этого вы можете проверить на filter_var. Он имеет фильтр для IP-адресов (IPv4 и IPv6): http://us.php.net/manual/en/filter.filters.validate.php

Пытаться:

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/

В дополнение к ответам Моргона и Марка Про Кампоса:

 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