thinkphp自动验证相关

protected $_validate = array(     
//邮箱验证,格式,必须
	 array('email','require','邮箱必须!'), 
	 array('email','email','邮箱格式不正确!'), 
//昵称验证,格式,必须,唯一
   array('nickname','require','昵称必须!'),
	 array('nickname','','昵称已经存在!',0,'unique',3), 
	 array('nickname','/^[a-zA-Z0-9\_\x{4e00}-\x{9fa5}]{3,15}$/u','昵称不合法!'), 
//密保问题验证
	 array('question','require','密保问题必须!'),
	  array('question','/^[a-zA-Z0-9\_\x{4e00}-\x{9fa5}]{3,15}$/u','问题不合法!'), 
//密保问题答案验证
	 array('answer','require','密保问题必须!'),
	  array('answer','/^[a-zA-Z0-9\_\x{4e00}-\x{9fa5}]{3,15}$/u','问题不合法!') 
	 //array('value',array(1,2,3),'值的范围不正确!',2,'in'), // 当值不为空的时候判断是否在一个范围内     
	  
	 );

      以上为自动验证的静态方式的写法,要注意的是:

      1.php中文验证方式为  

        \x{4e00}-\x{9fa5} //不要忘记u参数 小写 表示uttf-8格式验证 这个是关键,如果你的前台是utf-8的话
      2.现在来说说unique 和最后一个参数,首先说我遇到的问题:

          在唯一性一栏 发现无法验证 然后数据库插入失败 原因是,重复插入,也就是说,确实重复了 但是unique 判断失效,经过测试其它的条件是成立的,在这个问题纠结了很久,后来想起是不是因为数据库外键的原因,我这是两个表同时‘插入’,第一个主表没问题,后面的问题就来了,于是我把验证时间改为update时验证,结果惊喜,成功!原来以为真的成功了 后来随便输入测试 发现任意输入都会提示已存在,无奈进入源码探索unique的运作方式看到了这一行代码:

     if(!empty($data[$this->getPk()])) { // 完善编辑的时候验证唯一
                    $map[$this->getPk()] = array('neq',$data[$this->getPk()]);
                }
       想起第二个表中是没有加主键的,于是 随便加了一个id主键,测试成功,这次真的成功了,但是至于验证一个字段的值是否已存在为什么要主键,目前还不知道为什么,希望有人可以告知!
    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值