zoukankan      html  css  js  c++  java
  • Thinkphp 1.验证规则 2.静态定义 3.动态验证

    一.验证规则

    数据验证可以对表单中的字段进行非法的验证操作。一般提供了两种验证方式:

    静态定 义($_validate 属性)和动态验证(validate()方法)。

    //验证规则

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

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


    PS:验证字段、验证规则和错误提示这三项是必选的,大多数也是用这三项;而验证 条件、附加规则和验证时间是可选的。


    验证字段:一般来说是表单的字段名,不一定必须和数据表匹配的,因为有一些比如密 码确认等辅助字段的存在。

    验证规则:系统内置了常用的规则,require(字段必填)、email(邮箱格式)、url(url 格式)、currency(货币)、number(正整数)、integer(整数)、double(浮点数)、zip(邮 政编码)、english(英文)。

    错误信息:验证失败后的提示。

    验证条件:共三种:

    1.self::EXISTS_VALIDATE 或 0,表示存在字段就验证(默认);

    2.self::MUST_VALIDATE 或 1,表示必须验证;

    3.self::VALUE_VALIDATE 或 2,表示值不为空的时候验证。

    这些规则默认采用的附加规则是 regex,正则表达式验证,只 不过是设定好的。

    附加规则:配合验证规则使用,包括一下规则:

    二.静态定义

    在模型类里预先定义好该模型的自动验证规则,就是静态定义

    //模型类定义验证规则 
    class UserModel extends Model { protected $_validate = array( 
    //默认情况下用系统内置
     array('user', 'require', '用户不得为空!'), 
    //验证数据唯一性
    array('user', '', '用户名称已存在!',2,'unique',1),
     //验证密码不得为空 array('pass', 'require', '密码不得为空!'), 
    //密码不得小于六位不得大于20位
     array('pass', '6,20', '密码不得小于6位,不得大于20位', 3, 'length'),
    );
    }
    //为了测试方便,我们可以直接通过模拟提交 POST:
     //控制器create()方法自动调用验证 
    $user = D('User'); 
    $data['user'] = '蜡笔小新'; 
    $data['pass'] = '123'; 
    if ($user->create($data)) { 
    echo '所有数据验证成功!'; 
    } else { 
    //输出错误信息
     var_dump($user->getError()); 
    }

    ThinkPHP 提供了九种自动验证内置方案,具体如下:

    //内置验证require,不得为空的用法 
    array('user', 'require', '用户不得为空!'),
    
    //内置验证email,合法的邮箱格式 
    array('user', 'email', '邮箱格式不合法!'),
    
    //内置验证url,验证网址是否合法 
    array('user', 'url', 'URL 路径不合法!'),
    
    //内置验证currency,验证是否为货币 
    array('user', 'currency', '货币格式不正确!'),
    
    //内置验证zip,验证是否为六位整数邮政编码 
    array('user', 'zip', '邮政编码格式不正确!'),
    
    //内置验证number,验证是否为正整数 
    array('user', number, '正整数格式不正确!'),
    
    //内置验证integer,验证是否为整数,正负均可 
    array('user', 'integer', '整数格式不正确!'),
    
    //内置验证double,验证是否为浮点数,正负均可 
    array('user', 'double', '整数格式不正确!'),
    
    //内置验证english,验证是纯英文 
    array('user', 'english', '不是纯英文!'),

    ThinkPHP 还提供了附加规则,来提升自动验证的扩展性:

    //附加规则regex,验证3-6位纯数字 
    array('user', '/^d{3,6}$/', '不是 3-6 位纯正数字', 0, 'regex'),
    
    //附加规则equal,验证是否和指定值相等 
    array('user', '李炎恢', '值不对等', 0, 'equal'),
    
    //附加规则notequal,验证是否与指定值不等 
    array('user', '李炎恢', '值不能相等', 0, 'notequal'),
    
    //附加规则confirm,验证两条字段是否相同 
    array('user', 'name', '两个用户名对比不同!',0,'confirm'),
    
    //附加规则in,某个范围,可以是数组或逗号分割的字符串 
    array('user', array(1,2,3), '不在指定范围', 0, 'in'), 
    array('user', '张三,李四,王五', '不在指定范围', 0, 'in'),
    
    //附加规则notin,某个范围,可以是数组或逗号分割的字符串 
    array('user', array(1,2,3), '不得在指定范围', 0, 'notin'), 
    array('user', '张三,李四,王五', '不得在指定范围', 0, 'notin'),
    
    //附加规则length,验证长度或数字范围 
    array('user', '3', '不得小于 3 位', 0, 'length'), 
    array('user', '3,5', '不得小于 3 位,不得大于 5 位', 0, 'length'),
    
    //附加规则between,验证某个范围,数字或逗号字符串 
    array('user', array(3,5), '必须是 3-5 之间的数字', 0, 'between'), 
    array('user', '3,5', '必须是 3-5 之间的数字', 0, 'between'),
    
    //附加规则notbetween,验证某个范围,数字或逗号字符串 
    array('user', array(3,5), '必须不是 3-5 之间的数字', 0, 'notbetween'), 
    array('user', '3,5', '必须不是 3-5 之间的数字', 0, 'notbetween'),
    
    //附加规则expire,设置有效期范围,必须是表单提交有效,可以是时间戳 
    array('user', '2014-1-10,2015-10-10', '时间已过期', 0, 'expire'),
    
    //附加规则ip_deny,IP禁止列表
    array('user', '127.0.0.1', '当钱 IP 被禁止', 0, 'ip_deny'),
    
    //附加规则ip_allow,IP允许列表 
    array('user', '127.0.0.1', '当前 IP 没有被允许', 0, 'ip_allow'),
    
    //附加规则callback,回调验证 
    array('user', 'checkLength', '用户名必须在 3-5 位', 0, 'callback', 3, array(3,5)),
    
    //回调方法 
    protected function checkLength($str,$min,$max) 
    { preg_match_all("/./", $str, $matches); 
    $len = count($matches[0]); 
    if ($len < $min || $len > $max) 
    { return false; }
     else { return true; }
     }
    //附加规则function,函数验证 
    array('user', 'checkLength', '用户名必须在 3-5 位', 0, 'function', 3, array(3,5)),
    
    //在 Common 文件夹下的 Common 文件夹建立 function.php 文件,会自动加载
     
    function checkLength($str,$min,$max) 
    { 
    preg_match_all("/./", $str, $matches); 
    $len = count($matches[0]); 
    if ($len < $min || $len > $max) 
    { return false; } 
    else { return true; }
     }

    如果有多个字段都包含错误,默认只显示一个错误。如果想显示全部错误,可以设置属
    性:

    //批量验证 protected $patchValidate = true;

    如果是直接 POST 过来的,直接使用 create()方法即可。

    //控制器create()方法自动调用验证 
    $user = D('User');
    if ($user->create()) 
    { 
    echo '所有数据验证成功!'; 
    } else {
     //输出错误信息 
    var_dump($user->getError());
     }
    PS:由于使用的 UserModel 模型类,所以必须是 D()方法实例化。
    如果想把错误信息返回给ajax处理,可以是同ajaxReturn()方法返回JSON数据。
     //返回JSON格式 
    $this->ajaxReturn($user->getError());
    //1指定新增数据验证,
    2表示修改,
     if ($user->create($_POST,1)) {} //一般会自动判断

    三.动态验证

    动态验证就是把验证的规则放在控制器端,这样,在操作的时候比较灵活,缺点就是比 较混乱。

    //动态验证 
    $rule = array( array('user', 'require', '用户名不得为空'), ); 
    $user = M('User'); 
    $data['user'] = ''; 
    if ($user->validate($rule)->create($data))
     { 
    echo '验证所有字段成功!';
     } else { 
    var_dump($user->geterror()); 
    }
  • 相关阅读:
    Android Studio轻松上手指南(1)
    在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程
    opencv提取截获图像(总结摘来)
    10.正则表达式匹配
    遍历 Map 的方式
    09.回文数
    08.字符串转换位整数
    07.整数反转
    06. Z字型变换
    05. 求最长回文子串
  • 原文地址:https://www.cnblogs.com/zxl89/p/6222833.html
Copyright © 2011-2022 走看看