The DoYouHaoBaby PHP Framework中文开发文档手册
Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
[ 数据验证器使用方法 ]
这里我们将为你介绍 Check包的使用,Check包根据名字来说你也许猜到了。恩,不过,这个包用于数据验证。
目前系统用于模型数据验证,当然除了系统使用外,你也可以单独使用它来验证你的数据。
系统数据验证包使用一个入口文件来统一进行验证,这个文件为Check.class.php,位于 D:\phpcondition\htdocs\doyouhaobaby\DoYouHaoBaby\LibPHP\App\Common\Check\Check.clas.php。
1:创建一个验证器实例对象
要使用这个包,那么我们首先创建一个验证对象的实例,我们打开D:\phpcondition\htdocs\doyouhaobaby\TestApp\Lib\Action\IndexController.class.php,新建一个test4的方法。
添加上如下的代码:
- $oCheck = Check::RUN();
通过上面这个方法,我们创建了一个验证器入口实例,因为Check.class.php 中构造函数为私有函数,我们无法通过构造函数来创建对象实例。
2:用系统内置的验证器来验证数据
我们在test4方法中写下如下的代码:
- $oCheck = Check::RUN();
- $value = 10;
- if (!Check::C( $value, 'max', 8 )){
- echo '<span style="color:red;">'.$oCheck->getErrorMessage().'</span>';
- }
如图:

运行浏览器,你会看到如下的结果:
- 数据$Data最大值为8
如图:

说明: C( $Data, $Check )方法用于 单个规则验证值,验证通过返回 true,失败返回 false。
$Check 参数是验证规则。
如果使用 Check 自带的验证规则,可以使用如下的写法:
- Check::C( $value, 'between', 1, 5 );
验证规则类位于包Check中CheckList里面,'between' 是验证规则的名字,对应于 CheckBetween类。
因此要使用 Check 的其他验证类,将类中的“Check”去掉即为验证规则名。
如果要使用自定义的验证规则,有三种写法:
- // 使用某个类的静态方法做验证方法
- Check::C($value, array('MyClass', 'myMethod'), $args);
- // 功能同上
- Check::C($value, 'MyClass::myMethod', $args);
- // 使用某个对象的方法做验证方法
- Check::C($value, array($my_obj, 'myMethod), $args);
C() 的第一个参数是要验证的值,而第二个方法是验证规则。如果验证规则需要更多的参数,则跟在第二个参数后面提供。
同时,验证后,我们通过如下两个方法来反馈验证相关信息。
Check::isError( ) 返回是否验证出错,结果为 布尔值,Check::getErrorMessage( )返回验证错误后的消息,验证没有错误,返回空值。
3:Check::checkByArgs( $Check, array $arrArgs ) 函数
根据源代码来看,C()方法实际还是通过checkByArgs来执行,它和C()方法只是参数不同而已。
它用于单个规则及附加参数验证值,checkByArgs() 方法的第一个参数是验证规则。第二个参数则是包括被验证值在内,要传递给验证规则的参数。
例如:
- // C() 的写法
- Check::C($value, 'max', 6);
- // checkByArgs() 的写法
- Check::checkByArgs( 'max', array($value, 6) );
4:checkBatch设置多个验证
checkBatch用一组规则验证值, checkBatch() 方法对一个值应用一组验证规则,并返回最终的结果。
这一组验证规则中只要有一个验证失败,都会返回 false。只有当所有规则都通过时,checkBatch() 方法才会返回 true。>
用法:
- $bRet = Check::checkBatch( $value,
- array(
- array('int'),
- array('between', 2, 6),
- )
- );
$arrChecks 参数必须是一个数组,包含多个规则,及验证规则需要的参数。每个规则及参数都是一个单独的数组。
如果提供了 $arrFailed 参数,则验证失败的规则会存储在 $arrFailed 参数中:
- $arrFailed = null;
- $bRet = Check::checkBatch( $Data, $arrCheck, true, $arrFailed );
- G::dump( $arrFailed ); // 所有没有验证通过的规则
5:扩展我们的验证器
系统提供了五十余个验证器,我们将会一一罗列下来。
如图:

- CheckAlnum.class.php | 是否是字母加数字
- - alnum
- CheckAlpha.class.php | 是否是字母
- - alpha
- CheckAscii.class.php | 是否为Ascii字符
- - ascii
- CheckBetween.class.php | 是否处于之间
- - between
- CheckBinary.class.php | 是否为二进制
- - binary
- CheckCntrl.class.php | 是否为控制符
- - cntrl
- CheckCurrencyclass.php | 是否是有效的货币格式
- - currency
- CheckDate.class.php | 是否是日期(yyyy/mm/dd、yyyy-mm-dd)
- - date
- CheckDatetime.class.php | 是否是日期 + 时间
- - datetime
- CheckDigit.class.php | 是否为有效的数字
- - digit
- CheckDomain.class.php | 是否是正确的域名格式
- - domain
- CheckDouble.class.php | 是否是double类型的数据
- - double
- CheckEmail.class.php | 是否是电子邮件地址
- CheckEnglish.class.php | 是否是英文字符
- - en
- - english
- CheckEqual.class.php | 是否等于指定值
- - equal
- - eq
- CheckFloat.class.php | 是否为浮点数
- - float
- CheckGraph.class.php | 是否为可见字符
- - graph
- CheckGreaterOrEqual.class.php | 大于等于某一个值
- - greater_or_equal
- - egt
- CheckGreaterThan.class.php | 大于某一个值
- - greater_than
- - gt
- CheckIn.class.php | 数据位于一个范围
- - in
- CheckInt2.class.php | 验证是否为整数
- - int2
- CheckInteger.class.php | 是否是正确的int类型
- - integer
- - int
- CheckIp.class.php | 是否是有效地Ip地址
- - ip
- CheckIpv4.class.php | 是否为Ipv4
- - ipv4
- CheckLessOrEqual.class.php | 值是否小于等于
- - less_or_equal
- - elt
- CheckLessThan.class.php | 值小于某一个值
- - less_than
- - lt
- CheckLower.class.php | 是否全部为小写
- - lower
- CheckMax.class.php | 数据的值是否小于等于最大值
- - max
- CheckMaxLength.class.php | 数据长度是否小于等于最大值
- - max_length
- - max-len
- CheckMin.class.php | 数据最小值
- - min
- CheckMinLength.class.php | 最小长度
- - min_length
- - min_len
- CheckMobile.class.php | 是否为有效的Mobile号码
- - mobile
- CheckNotEmpty.class.php | 值不能为空
- - not_empty
- CheckNotEqual.class.php | 验证两个数据是否不相等
- - not_equal
- - neq
- CheckNotNull.class.php | 是否不为null
- - not_null
- CheckNotSame.class.php | 验证两个数据是否不相同
- - not_same
- CheckNumber.class.php | 是否是数字
- - num
- - number
- CheckNumberUnderlineEnglish.class.php | 是否有字母,下划线,数字组成的字符串
- - number_underline_english
- - num_underline_en
- - num_un_en
- - n_u_e
- - nue
- CheckOctal.class.php | 是否是八进制格式
- - octal
- CheckPhone.class.php | 是否是有效的PHONE号码
- - phone
- CheckPrint.class.php | 是否是可打印的字符
- CheckPunct.class.php | 是否为标点符号
- - punct
- CheckQq.class.php.php | 是否是有效的QQ号码
- CheckRegex.class.php | 正则验证
- - regex
- CheckRequire.class.php | require
- - 不能为空
- CheckSame.class.php | 验证两个数据是否一样
- - same
- CheckSkipEmpty.class.php | 如果为空(空字符串或者 null),则跳过余下的验证
- - emptyempty
- CheckSkipError.class.php | 跳过错误
- - error
- CheckSkipNull.class.php | 如果值为 NULL,则跳过余下的验证
- - null
- CheckStrlen.class.php | 是否是电子邮件地址
- - strlen
- CheckTime.class.php | 是否是时间(hh:mm:ss)
- - time
- CheckType.class.php | 验证值是否为特定的格式
- - type
- CheckUpper.class.php | 字符串是否全部为大写
- - upper
- CheckUrl.class.php | 是否是URL格式
- - url
- CheckUrl2.class.php | 是否是Url地址( URL验证有严格和不严格之分 )
- - url2
- CheckWhitespace.class.php | 是否为空白字符串
- - whitechspace
- CheckXdigits.class.php | 是否是十六进制数
- - xdigits
- CheckZip.class.php | 是否是有效zip支持的格式
- - zip
- - rar
你会在Check.class.php后面,看到这样一句代码:
- /** 加载系统验证规则 */
- Check::addCheckDir( dirname(__FILE__).'/CheckList/' ) ;
如图:

同样,你可以在任意地方添加一个目录,里面放置自定义的验证器,这个可以参考系统提供的验证器。
同时,验证器目录必须有效,而且必须为物理路径,同时验证器必须符合我们验证器的命名规则。请你
根据系统的验证器依样化葫芦来做吧。
好了,写完了。感叹啊,写一篇教程真不容易,折腾人。
