记录一下正则在自己项目中的使用,以前没有系统的总结过,这里总结一下,方便自己的查看
网站的登录程序
在网站程序中的使用,一般包括了前段js的验证和后端php程序的验证,虽然一般的验证各个框架可以帮我们进行验证,但是有些特殊的情况下我们还是需要自己验证的,所以我们必须掌握如果使用正则进行验证程序。
前段检测
这里是前段的一段js代码,可以先看一下所需要的dom信息以及页面的结构1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<h1>注册页面</h1>
<form action="doAction.php" method="post">
<table border='1' cellpadding='0' cellspacing='0' bgcolor='#ABCDEF' width='80%'>
<tr>
<td>用户名</td>
<td><input type="text" name="username" id="" placeholder='请输入合法用户名' />用户名由数字、字母、下划线组成</td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="password" id="" placeholder='请输入密码' />由数字、字母组成</td>
</tr>
<tr>
<td>邮箱</td>
<td><input type="email" name="email" id="" placeholder='请输入合法邮箱' />合法邮箱</td>
</tr>
<tr>
<td>年龄</td>
<td>
<input type="number" name="age" id="" placeholder='请输入合法年龄' />年龄必须为正整数
</td>
</tr>
<tr>
<td>个人博客</td>
<td><input type="url" name="url" id="" placeholder='请输入合法URL地址' />类似http://phpfamily.org</td>
</tr>
<tr>
<td colspan='2'><input type="submit" value="注册" /></td>
</tr>
</table>
</form>
</body>
</html>后端代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
header('content-type:text/html;charset=utf-8');
$username=$_POST['username'];
$password=$_POST['password'];
$email=$_POST['email'];
$age=$_POST['age'];
$url=$_POST['url'];
//验证用户名,首字母只能是字母
if(!preg_match('#^[a-zA-Z]\w+$#',$username)){
die('用户名不符合规范');
}
//校验密码,密码长度为8~16
if(!preg_match('#^\w{8,16}$#',$password)){
die('密码不符合规范');
}
//验证邮箱
if(!preg_match('#^\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,5}$#i',$email)){
die('邮箱不符合规范');
}
//验证年龄
if(!preg_match('#^[1-9]\d*$#',$age)){
die('年龄不符合规范');
}
//验证URL
if(!preg_match('#^[a-zA-z]+://(\w+(-\w+)*)(\.(?:\w+(-\w+)*))*(\?\S*)?$#i',$url)){
die('URL不符合规范');
}
echo '注册成功';使用Filter进行验证
如果只是一些常规的检测的话,感觉使用Filter函数更加方便些,内置的效率更加好一些。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
header('content-type:text/html;charset=utf-8');
//校验邮箱
$email=filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL);
var_dump($email);
echo '<hr/>';
//校验年龄
$options=array(
'options'=>array(
'min_range'=>1,
'max_range'=>150,
'default'=>18
)
);
$age=filter_input(INPUT_POST,'age',FILTER_VALIDATE_INT,$options);
var_dump($age);
echo '<hr/>';
$salary=filter_input(INPUT_POST,'salary',FILTER_VALIDATE_FLOAT);
var_dump($salary);
echo '<hr/>';
$url=filter_input(INPUT_POST,'url',FILTER_VALIDATE_URL);
//http://phpfamily.org?type=1
$url=filter_input(INPUT_POST,'url',FILTER_VALIDATE_URL,FILTER_FLAG_QUERY_REQUIRED);
//http://phpfamily.org/a/b/c
$url=filter_input(INPUT_POST,'url',FILTER_VALIDATE_URL,FILTER_FLAG_PATH_REQUIRED);
var_dump($url);
echo '<hr/>';
//1 true on yes 都会返回true
//0 flase off no ''都返回false
$testBool=filter_input(INPUT_POST,'testBool',FILTER_VALIDATE_BOOLEAN);
var_dump($testBool);
echo '<hr/>';
//测试IP地址
$ip=filter_input(INPUT_POST,'ip',FILTER_VALIDATE_IP);
var_dump($ip);
echo '<hr/>';
//测试正则表达式
$reg=filter_input(INPUT_POST,'reg',FILTER_VALIDATE_REGEXP,array(
'options'=>array(
'regexp'=>'#^\d#'
)
));
var_dump($reg);
echo '<hr/>';
var_dump(filter_has_var(INPUT_POST,'email'));
var_dump(filter_has_var(INPUT_POST,'username'));
var_dump(filter_has_var(INPUT_GET,'test'));