Web表单与会话技术_用户注册表单数据格式验证

在前面发布的“Web表单与会话技术_用户注册”基础上,进行表单格式验证。

1、创建表单数据格式验证函数库文件(check_form.php)

<?php
//验证用户名(2-10位,只支持汉字、英文字母、数字、下划线)
/*
 * preg_match()正则表达式匹配函数
“/^....../$”表示要匹配的字符串必须按照指定规则开始和结束
“/....../u”用于匹配多字节字符
“\w”用于匹配一个英文字母、数字或下划线
“{2,10}”用于限定匹配的字符在2-10个范围内
“\x{4e00}-\x{9fa5}”用于匹配字符编码在0x4E00-0x9FA5连续区域的汉字
 */
function checkUsername($username){
    if(!preg_match('/^[\w\x{4e00}-\x{9fa5}]{2,10}$/u',$username)){
        return '用户名格式不符合要求!用户名2-10位,只支持汉字、英文字母、数字、下划线。';
    }
    return true;
}
//验证密码(6-16位,只支持英文字母、数字、下划线)
function checkPassword($password){
    if(!preg_match('/^\w{6,16}$/',$password)){
        return '密码格式不符合要求!密码6-16位,只支持英文字母、数字、下划线。';
    }
    return true;
}
//验证邮箱(不超过40位)
/*
一个完整的邮箱地址由“用户名”、“@符号”、“服务器域名”3部分组成,用户名可以使用英文字母和数字,服务器域名要符合域名的规则。
“[a-z0-9]”用于匹配一个英文字母或数字字符,“[a-z0-9]+”表示匹配一次或多次。
“([a-z0-9]+\.)+”用于循环匹配符合“[a-z0-9]+”并且以“.”结束的字符串。(由于“.”是正则表达式中的符号,所以使用“\.”进行转义。)
“[a-z]{2,4}”用于匹配域名后缀,即com、cn、net等。
*/
function checkEmail($email){
        if(strlen($email)>40){
            return '邮箱长度不合法!';
        }elseif(!preg_match('/^[a-z0-9]+@([a-z0-9]+\.)+[a-z]{2,4}$/i',$email)){
            return '邮箱格式不符合要求!';
        }
    return true;
}

2、在register.php页面,调用表单数据格式验证函数库文件,对用户输入的注册信息进行验证。

<?php
header('Content-Type:text/html; charset=utf-8');
require '../chapter3/public_function.php';
require './check_form.php';

//连接数据库,设置字符集,选择数据库
dbInt();
//接收表单数据
$username=$_POST['username'];
$email=$_POST['email'];
$password=$_POST['password'];
//过滤用户输入数据
$username=safeHandle($username);
$email=safeHandle($email);
//通过POST发送的数据会保持在$_POST数组中。
//将接收到的表单数据($username,$email,$password)赋给数组$ata
$data=array();
$data=$_POST;//username,email,password
//为每个字段定义不同的验证函数
$checkdata=array(
    //表单字段名=》验证函数名
    'username'=>'checkUsername',
    'email'=>'checkEmail',
    'password'=>'checkPassword',
);
//$error数组保存验证后的错误信息
$error=array();
//循环验证每个字段,保存错误信息
foreach($checkdata as $k=>$v){
    //运用可变函数,实现不同字段调用不同函数
    $result=$v($data[$k]);
    if($result!==true){//$result不为true(1)说明该字段值格式验证失败
        $error[]=$result;//保存错误信息
    }
}
//如果$error为空,说明表单数据格式正确。
if(empty($error)){
    //表单验证成功
    //判断用户名是否已经存在
    $sql="select `id` from `user` where `username`='$username'";
    $res=query($sql);
    $res=mysql_fetch_row($res);
    if(!empty($res)){
        //用户名已存在,不允许注册,停止运行程序
        //die('用户名已存在,请更换用户名。');
        echo "<script> alert('用户名已存在,请更换用户名。');location.href='./register.html'</script>";
    }else{
        //用户名不存在,可以注册。
        $password=md5($password);//使用MD5增强密码安全性
        //拼接插入数据的SQL语句
        $sql="insert into `user` (`username`,`password`,`email`) values ('$username','$password','$email')";
        $res=query($sql);
        echo "<script> alert('您已成功注册!')</script>";
    }
}else{
    //弹出错误信息警告,重新进行注册。
    foreach($error as $v){
        echo "<script> alert('$v');location.href='./register.html'</script>";
    }
}

3、知识点

(1)一些函数

trim();   去除字符串左右两端的空白字符,包括空格、换行和制表符等。

intval();   将字符串转换为整型;

strip_tags();   去除字符中的“<>”标签,标签内的内容也会被去除。

htmlspecialchars();   将字符串中的HTML特殊字符转换为HTML实体字符。(例echo htmlspecialchars('<b>测试</b>');)//输出结果:&lt;b&gt;测试&lt;/b&gt;

(2)数据验证

QQ号码验证:

一个正确的QQ号码,应该以1-9的数字开头,从第2位开始是0-9的任意数字,QQ号码长度至少为5位数。

实现QQ验证的正则表达式为:/^[1-9][0-9][4,19]$/

“^[1-9]”表示以1-9的数字开头,“[0-9][4,19]”表示4-19个任意的十进制数字,“$”表示字符串结尾。因此该正则表达式可以匹配5-20位的QQ号码。

手机号码验证:

中国内地的手机号码由11位数字组成,必须以1开头,第2位数字只能是3、5、8,后9位则由0-9之间的数字组成。

实现手机号码验证的正则表达式为:/^1[358]\d{9}$/

“\d”匹配任意的十进制数字,相当于[0-9]。

URL地址验证:

URL地址是按照一定格式组成的字符串,通常以协议名“http://”开头,后面跟着域名和文件路径。

实现URL地址验证的正则表达式为:/^http:\/\/[a-z\d-]+(\.[\w\/]+)+$/i

“^http:\/\/”匹配以“http://”开头的字符串,斜线“/”需要使用反斜线“\”进行转义。“[a-z\d-]+”匹配英文字母、数字、中横线“-”,一次或多次。

“[\w\/]+”匹配英文字母、数字、下划线、斜线“/”,一次或多次。“(\.[\w\/]+)+”用于循环匹配符合“\.[\w\/]+”规则的字符串。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值