Мне нужно создать функцию для 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. Также разумная проверка на вышеприведенную функциональную концепцию также будет приятной.
редактировать
Пожалуйста, см. Комментарий 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));
Вместо этого вы можете проверить на 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
В дополнение к ответам Моргона и Марка Про Кампоса:
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; }
Ресурсы