Поскольку ответ с наибольшим количеством голосов имеет довольно существенную проблему, я собираюсь поделиться своим собственным.
Возвращает true, если передан адрес, который выглядит как IPv6, и false, если передан адрес, который выглядит как IPv4 (или сопоставленный IPv4 IPv6). Фактические адреса в дальнейшем не проверяются; используйте filter_var()
, если вам нужно их проверить.
function is_ipv6($address) {
$ipv4_mapped_ipv6 = strpos($address, "::ffff:");
return (strpos($address, ":") !== FALSE) &&
($ipv4_mapped_ipv6 === FALSE || $ipv4_mapped_ipv6 != 0);
}