フォームã§å…¥åŠ›ã•ã‚ŒãŸIPアドレスãŒæ£å½“ãªæ–‡å—列ã‹åˆ¤å®šã™ã‚‹ãŸã‚ã®ãƒãƒªãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³å‡¦ç†ã‚’実装ã—ã¾ã™ã€‚
基本的ã«ã¯PHPã®æ£è¦è¡¨ç¾ã‚’使用ã—ã¾ã™ãŒã€ç´°ã‹ã„オクテットãªã©ã®ãƒã‚§ãƒƒã‚¯ã¯ç‹¬è‡ªã«ãƒ—ãƒã‚°ãƒ©ãƒŸãƒ³ã‚°ã—ã¾ã™ã€‚
今回ã¯ã€ã‚ªã‚¯ãƒ†ãƒƒãƒˆãŒ0~255ã®æ•°å€¤ã§ã‚ã‚‹ã‹ã‚’ãƒã‚§ãƒƒã‚¯ã—ãŸå¾Œã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã€ãƒ–ãƒãƒ¼ãƒ‰ã‚ャストアドレスã€ãƒ«ãƒ¼ãƒ—ãƒãƒƒã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å ´åˆã¯ã‚¨ãƒ©ãƒ¼ã¨ã—ã¾ã™ã€‚
/**
* IPアドレス形å¼ã®æ–‡å—列ã®å ´åˆtrueã‚’è¿”ã™
*
* @param string @ip IPアドレス
* @return void
*/
function valid_ip( $ip ) {
// 3æ¡ä»¥å†…数値ãŒãƒ‰ãƒƒãƒˆåŒºåˆ‡ã‚Šã§4ã¤ã‚ã‚‹ã‹ãƒã‚§ãƒƒã‚¯
if ( ! preg_match( "/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/", $ip ) ) {
return false;
}
// å„オクテットã®ãƒã‚§ãƒƒã‚¯
if ( ! valid_ip_octet( $ip ) ) {
return false;
}
// ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å ´åˆ(ホスト部ã®ãƒ“ットãŒå…¨ã¦0)
if ( substr( $ip, -4 ) == '.0.0' ) {
return false;
}
// ブãƒãƒ¼ãƒ‰ã‚ャストアドレスã®å ´åˆ(ホスト部ã®ãƒ“ットãŒå…¨ã¦1)
if ( substr( $ip, -8 ) == '.255.255' ) {
return false;
}
// ループãƒãƒƒã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å ´åˆ(127.0.0.1)
if ( $ip == '127.0.0.1' ) {
return false;
}
return true;
}
/**
* å„オクテット㌠0~255 ã§ã‚ã‚‹å ´åˆã¯trueã€ãã†ã§ãªã„å ´åˆã¯falseã‚’è¿”ã™
*
* @param string @ip IPアドレス
* @return void
*/
function valid_ip_octet( $ip ) {
$octets = explode( '.', $ip );
foreach( $octets as $octet ) {
if ( ctype_digit($octet) === false || $octet < 0 || $octet > 255 ) {
return false;
}
}
return true;
}
上記関数を使用ã™ã‚‹å ´åˆã¯æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
$ipaddress = 'xxx.xxx.xxx.xxx';
if (valid_ip($ipaddress)) {
echo 'IPアドレスã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。';
} else {
echo 'IPアドレスã§ã¯ã‚ã‚Šã¾ã›ã‚“。';
}