概要
配列内の文字列がIPアドレスであればTrue
、そうでなければFalse
をecho
する
コード
ipcheck.php
<?php
$str = array("1.2.3...4", "1.2.3.4.", "hoge.2.3.4", "1.2.256.4", "1.2.3.4");
// IPをechoしてチェック結果を返す(メイン処理)
foreach ($str as $x) {
echo "$x ";
IPAddressCheck($x);
}
// IPアドレスかチェックして True or False を返す関数
// 3つの関数を使って判定
function IPAddressCheck($ipaddress) {
if (DotCount($ipaddress) == "NG" || Bothendsoftheoctet($ipaddress) == "NG" || NumericalValueoftheOctet($ipaddress) == "NG") {
SayAnswer("False");
} else {
SayAnswer("True");
}
}
// 解をechoさせる
function SayAnswer ($answer) {
echo "$answer" . PHP_EOL;
}
// ドットが3つか判定
function DotCount($ipaddress) {
$dotcount = substr_count($ipaddress, '.');
if ($dotcount !== 3) {
return "NG";
}
}
// 両端が数字かどうか判定
function BothEndsoftheOctet($ipaddress) {
$octet = explode('.', $ipaddress);
$octetcheck = $octet[0] . end($octet);
if (ctype_digit($octetcheck) == FALSE) {
return "NG";
}
}
// 各オクテットが 0~255 でありまた数値か判定
function NumericalValueoftheOctet($ipaddress) {
$octet = explode('.', $ipaddress);
foreach ($octet as $y) {
if (($y < 0) || ($y > 255) || (ctype_digit($y) == FALSE)) {
return "NG";
break;
}
}
}
?>
使用例
上記のコードをそのまま実行
$ php ipcheck.php
1.2.3...4 False
1.2.3.4. False
hoge.2.3.4 False
1.2.256.4 False
1.2.3.4 True
所感など
-
IPAddressCheck
でのif文はもっとすっきりならないかなぁ - そもそもIPをチェックする関数がPHPには存在するらしいので、それも使用して書いてみたい
-
BothEndsoftheOctet
は要らないかもしれない - 第1オクテットが0の場合は弾きたいなー
- PrivateIPとGlobalIPのチェックもしたい