ThinkPHP中自动验证实例


首先感谢一下thinkphp,提供了一个这么好的框架,使用thinkphp大大缩短了系统的开发周期。今天拾图网和温州天时网站建设跟大家分享一下thinkphp中的自动验证码这一块内容。在上一章中已经做过类似的小结:ThinkPHP 自动验证及验证规则详解;这章我们主要针对thinkphp自动验证的函数验证(function)、方法验证(callback)。

验证的格式:

array(验证字段,验证规则,错误提示[,验证条件][,附加规则][,验证时间])

ThinkPHP 自动验证定义的附加规则如下:

regex:使用正则进行验证(默认)

unique:验证唯一性

confirm:验证表单中的两个字段是否相同

equal:验证是否等于某个值

in:验证是否在某个范围内

function:使用函数验证

callback:使用方法验证

下面提供一个自动验证的案例,给大家参考一下:

// 默认情况下用正则进行验证
array('title','require','标题不能为空。'),
array('order','number','排序必须是数字。',2),
array('email','email','邮箱格式不符合要求。'),
array('qq','qq','QQ号码不正确。'),

// 在新增的时候验证标题title字段是否唯一
array('title','','标题已经存在!',0,'unique',1), 

// 验证确认密码是否和密码一致
array('repassword','password','确认密码不正确。',0,'confirm'), 

// 验证class填写的值为 一班
array('class','一班','班级必须填写一班。',0,'equal'), 

// 当值不为空的时候判断是否在一个范围内
array('value',array(1,2,3),'值的范围不正确。',2,'in'), 

// 自定义函数验证用户名格式
array('username','checkName','用户名格式不正确。',0,'function'), 

// 在注册或更改资料是调用 checkEmail 方法检查邮箱
array('email','checkEmail',1,'callback'),

下面介绍一下,怎么使用正则表达式(regex)进行验证:

上面的几类附加规则上,使用正则表达式是经常使用的,也是系统默认的验证附加规则。

系统内置了如下正则检测规则:

require(必须)

email(邮箱格式)

url(URL地址)

currency(货币)

number(数字)

qq(QQ号码)

english(英文字符)

这些附加规则在thinkphp系统中已经进行了初始化,现在可以直接使用,但是如果这些附加规则还是无法满足当前的要求,那么就可以使用下面的这样自定义的正则规则:

array('username','/^{3,15}$/','用户名不符合要求。'),
//该规则要求用户名只能为英文字符及下划线和数字组成,且长度为3-15个字节。

怎么使用(function)来自定义函数验证规则:

使用自定义函数验证附加规则,函数可以是 Common/common.php 里的自定义函数,也可以是 PHP 的内置函数:

class UserModel extends Model{
    protected $_validate = array(
        array('username','checkName','用户名不符合要求。',0,'function'),
    };
}

自定义 checkName 函数:

function checkName($username){
    if(!preg_match('/^{3,15}$/', $username)){
        return false;
    }else{
        return true;
    }
}

怎么使用(callback)方法验证规则:

ThinkPHP 自动验证还支持调用当前 Model 类的一个方法来进行验证。

class UserModel extends Model{
    protected $_validate = array(
        array('email','checkEmail','邮箱已经存在。',1,'callback'),
    };

    // checkEmail方法
    protected function checkEmail(){
        $User=new Model('User');
	// 新用户注册,验证唯一
        if(empty($_POST<'uid'>)){
            if($user->getByEmail($_POST<'email'>)){
                return false;
            }else{
                return true;
            }
        }else{
            // 更改资料判断邮箱与其他人的邮箱是否相同
            if($user->where("uid!={$_POST<'uid'>} and email='{$_POST<'email'>}'")->find()){
                return false;
            }else{
                return true;
            }
        }
    }
}

当 checkEmail 方法返回 false 时,验证就不通过。由此可见 ThinkPHP系统中的自动验证功能十分强大,能满足对表单的各种不同的验证要求。


注:本文转载自拾图网[http://www.tshinet.com],转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除。
上一篇 下一篇

分享

最新评论

最新加入