TOP ▲ itcore TOP プログラムパーツ

uIpCheck IPv4の形式チェック OK:true NG:false| itcore 2017年

PHP関数

<?php
// IPv4の形式チェック OK:true NG:false
function uIpCheck($ip) {
  // ドットの数が3でなければエラー
  $dot = substr_count($ip, ".");
  if (3 != $dot) return false;
  // 一番先頭が0はエラー
  // if ("0" === substr($ip, 0, 1)) return false; // 0.x.x.xもOKにしておく
  // それぞれのパートについてチェック
  $a_num = explode(".", $ip);
  foreach ($a_num as $num) {
    //1-3桁以外はエラー
    $len = strlen($num);
    if ($len < 1 || $len > 3) return false;
    //0-9以外はエラー
    for ($i = 0; $i < $len; $i++) {
      if (false === strpos("0123456789", substr($num, $i, 1))) return false;
    }
    //"0"以外で先頭が0はエラー 先頭が0だと8進数とみなされる。
    if ("0" !== $num && "0" === substr($num, 0, 1)) return false;
    //255を超える場合はエラー
    if (255 < $num) return false;
  }
  // OK
  return true;
}
?>

単体テスト 実行

<?php include "uIpCheck.func"; ?>
<?php
  echo "OK<br>\n";
  $ip = "192.168.0.1"; $ret = uIpCheck($ip); echo "ip=$ip ret=$ret<br>\n";
  $ip = "0.0.0.0"; $ret = uIpCheck($ip); echo "ip=$ip ret=$ret<br>\n";
  $ip = "255.255.255.255"; $ret = uIpCheck($ip); echo "ip=$ip ret=$ret<br>\n";
  echo "NG<br>\n";
  $ip = "192168.0.1"; $ret = uIpCheck($ip); echo "ip=$ip ret=$ret<br>\n";
  $ip = "01.168.0.1"; $ret = uIpCheck($ip); echo "ip=$ip ret=$ret<br>\n";
  $ip = "1.2168.0.1"; $ret = uIpCheck($ip); echo "ip=$ip ret=$ret<br>\n";
  $ip = "1.168..1"; $ret = uIpCheck($ip); echo "ip=$ip ret=$ret<br>\n";
  $ip = "1.168.a0.1"; $ret = uIpCheck($ip); echo "ip=$ip ret=$ret<br>\n";
  $ip = "1.168.00.1"; $ret = uIpCheck($ip); echo "ip=$ip ret=$ret<br>\n";
  $ip = "192.168.0.256"; $ret = uIpCheck($ip); echo "ip=$ip ret=$ret<br>\n";
?>
<?php include "uJsClose.func"; print(uJsClose()); // 閉じるボタン ?>