CodeSky 代码之空

随手记录自己的学习过程

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

2014-01-25 20:37分类: PHP评论: 1

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

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

演示

源代码:

1<!DOCTYPE html>
2<html>
3<head>
4	<meta charset="utf-8">
5	<title>CheckIP</title>
6</head>
7<body>
8	<h1>请输入IP地址</h1>
9	<p>将检查是否在192.168.1.100192.168.1.150</p>
10	<form action="checkip.php" method="post">
11		<input type="text" name="ip" placeholder="请输入ip地址">
12		<input type="submit" name="submit" value="检查">
13	</form>
14
15	<?php
16		if ($_SERVER['REQUEST_METHOD'] === 'POST') {
17			$problem = FALSE;
18
19			if (empty($_POST['ip'])) {
20				echo '请输入ip地址';
21				$problem = TRUE;
22			}
23
24			if (!$problem) {
25				$array = explode('.', $_POST['ip']);
26				$counter = count($array);
27
28				if ($counter != 4) {
29					echo '你的IP地址格式不正确哟<br/>';
30					$problem = TRUE;
31				}
32
33				foreach ($array as $key => $value) {
34					str_replace(' ', '', $value);
35
36					if (!is_numeric($value)) {
37						echo 'IP地址由数字组成@-@识别不能<br/>';
38						$problem = TRUE;
39						break;
40					}
41
42					if ($key == 0) {
43						if($value < 1 || $value > 255) {
44							echo '第一个数字不能是0<br/>';
45							$problem = TRUE;
46						}
47					} else {
48						if ($value < 0 || $value > 255) {
49							echo '第一个数字以外必须在0-255之间<br/>';
50							$problem = TRUE;
51							break;
52						}
53					}
54				}
55
56				if (!$problem) {
57					if($array[0] == 192 && $array[1] == 168 && $array[2] == 1 && $array[3] >= 100 && $array[3] <= 150) {
58						echo '恭喜,在此范围内';
59					} else {
60						echo '=x=不在范围内哦';
61					}
62				}
63			}
64
65		}
66	?>
67</body>
68</html>
69

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

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

评论 (1)

kn0072014年1月29日 10:35

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