// rfc3986 の ABNF から文字通り ('WCP' のおかげで)
function validateIPv6($IP)
{
return preg_match('/
(?:
(?:
(?:[a-f0-9]{1,4}:){6}
::(?:[a-f0-9]{1,4}: ){5}
(?:[a-f0-9]{1,4})?::(?:[a-f0-9]{1,4}:){4}
(?: (?:[a-f0-9]{1,4}:){0,1}[a-f0-9]{1,4})?::(?:[a-f0-9]{1 ,4}:){3}
(?:(?:[a-f0-9]{1,4}:){0,2}[a-f0-9]{1,4})?: :(?:[a-f0-9]{1,4}:){2}
(?:(?:[a-f0-9]{1,4}:){0,3}[a -f0-9]{1,4})?::[a-f0-9]{1,4}:
(?:(?:[a-f0-9]{1,4}:){ 0,4}[a-f0-9]{1,4})?::
)
(?:
[a-f0-9]{1,4}:[a-f0-9]{1, 4}
(?:(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9] |25[0-5]).){3}
(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0- 4][0-9]|25[0-5])
)
(?:
(?:(?:[a-f0-9]{1,4}:){0,5}[a -f0-9]{1,4})?::[a-f0-9]{1,4}
(?:(?:[a-f0-9]{1,4}:){0 ,6}[a-f0-9]{1,4})?::
)
)Z/ix',
$IP
);
}
?>