PHP检查IP是否在指定范围内

题目如下:

输出用户的IP地址,并且判断用户的IP地址是否在192.168.1.100~192.168.1.150范围内。

当时想出了两种方法,一种把字符串按照.来拆分成数组,一个个范围比较,一种去掉点之后比较数字大小,可是后者有个问题,要是他们的IP地址不符合格式怎么办,还是得变成数组,所以就干脆用了前者。

演示

源代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>CheckIP</title>
</head>
<body>
    <h1>请输入IP地址</h1>
    <p>将检查是否在192.168.1.100~192.168.1.150</p>
    <form action="checkip.php" method="post">
        <input type="text" name="ip" placeholder="请输入ip地址">
        <input type="submit" name="submit" value="检查">
    </form>

    <?php
        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            $problem = FALSE;

            if (empty($_POST['ip'])) {
                echo '请输入ip地址';
                $problem = TRUE;
            }

            if (!$problem) {
                $array = explode('.', $_POST['ip']);
                $counter = count($array);

                if ($counter != 4) {
                    echo '你的IP地址格式不正确哟<br/>';
                    $problem = TRUE;
                }

                foreach ($array as $key => $value) {
                    str_replace(' ', '', $value);

                    if (!is_numeric($value)) {
                        echo 'IP地址由数字组成@-@识别不能<br/>';
                        $problem = TRUE;
                        break;
                    }

                    if ($key == 0) {
                        if($value < 1 || $value > 255) {
                            echo '第一个数字不能是0<br/>';
                            $problem = TRUE;
                        }
                    } else {
                        if ($value < 0 || $value > 255) {
                            echo '第一个数字以外必须在0-255之间<br/>';
                            $problem = TRUE;
                            break;
                        }
                    }
                }

                if (!$problem) {
                    if($array[0] == 192 && $array[1] == 168 && $array[2] == 1 && $array[3] >= 100 && $array[3] <= 150) {
                        echo '恭喜,在此范围内';
                    } else {
                        echo '=x=不在范围内哦';
                    }
                }
            }

        }
    ?>
</body>
</html>

这里我们用explode()切割字符串为数组。
扩展阅读:http://www.php.net/manual/zh/function.explode.php

为了避免用户多输入空格,我们使用str_replace(' ', '', $value)把空格替换成空值,也就起到了字符串消除空格的效果
扩展阅读:http://www.php.net/manual/zh/function.str-replace.php

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 成品, 源码, 题目

仅有一条评论

  1. 这个算是比较整洁了,不过还可以再整洁。

添加新评论