ローカルIPも使用するIPv4およびv6用の関数を作成する必要があります。
私が知っているのは、有効な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のコメント、およびより良い解決策についてはMorgonの回答を参照してください。
元の回答
inet_pton を使用できます。 IPが有効なIPv6またはIPv4でない場合は、falseを返します。
function validateIP($ip){
return inet_pton($ip) !== false;
}
PHPを確認してください filter_var
関数。 バリデーターの数 (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));
試してください:
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
代わりにfilter_varにチェックインすることをお勧めします。 IPアドレス(IPv4およびIPv6)用のフィルターがあります: http://us.php.net/manual/en/filter.filters.validate.php
MorgonとMarkPro 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;
}
リソース