The DoYouHaoBaby PHP Framework中文开发文档手册
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的方法。
添加上如下的代码:

  1. $oCheck = Check::RUN();  


通过上面这个方法,我们创建了一个验证器入口实例,因为Check.class.php 中构造函数为私有函数,我们无法通过构造函数来创建对象实例。

2:用系统内置的验证器来验证数据


我们在test4方法中写下如下的代码:

  1. $oCheck = Check::RUN();   
  2.   
  3. $value = 10;   
  4.   
  5. if (!Check::C( $value, 'max', 8 )){   
  6.   
  7.     echo '<span style="color:red;">'.$oCheck->getErrorMessage().'</span>';   
  8. }  

如图:




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



如图:


说明: C( $Data, $Check )方法用于 单个规则验证值,验证通过返回 true,失败返回 false。

$Check 参数是验证规则。
如果使用 Check 自带的验证规则,可以使用如下的写法:
  1. Check::C( $value, 'between', 1, 5 );   


验证规则类位于包Check中CheckList里面,'between' 是验证规则的名字,对应于 CheckBetween类。
因此要使用 Check 的其他验证类,将类中的“Check”去掉即为验证规则名。

如果要使用自定义的验证规则,有三种写法:
 
  1. // 使用某个类的静态方法做验证方法   
  2. Check::C($value, array('MyClass', 'myMethod'), $args);   
  3.   
  4. // 功能同上   
  5. Check::C($value, 'MyClass::myMethod', $args);   
  6.   
  7. // 使用某个对象的方法做验证方法   
  8. Check::C($value, array($my_obj, 'myMethod), $args);   

C() 的第一个参数是要验证的值,而第二个方法是验证规则。如果验证规则需要更多的参数,则跟在第二个参数后面提供。


同时,验证后,我们通过如下两个方法来反馈验证相关信息。
Check::isError(  ) 返回是否验证出错,结果为 布尔值,Check::getErrorMessage(  )返回验证错误后的消息,验证没有错误,返回空值。


3:Check::checkByArgs( $Check, array $arrArgs ) 函数


根据源代码来看,C()方法实际还是通过checkByArgs来执行,它和C()方法只是参数不同而已。
它用于单个规则及附加参数验证值,checkByArgs() 方法的第一个参数是验证规则。第二个参数则是包括被验证值在内,要传递给验证规则的参数。
例如:

  1. // C() 的写法   
  2. Check::C($value, 'max', 6);   
  3.   
  4. // checkByArgs() 的写法   
  5. Check::checkByArgs( 'max', array($value, 6) );  


4:checkBatch设置多个验证


checkBatch用一组规则验证值, checkBatch() 方法对一个值应用一组验证规则,并返回最终的结果。
这一组验证规则中只要有一个验证失败,都会返回 false。只有当所有规则都通过时,checkBatch() 方法才会返回 true。>

用法:
  1. $bRet = Check::checkBatch( $value,   
  2.      array(   
  3.            array('int'),   
  4.                array('between', 2, 6),   
  5.            )   
  6. );  

$arrChecks 参数必须是一个数组,包含多个规则,及验证规则需要的参数。每个规则及参数都是一个单独的数组。


如果提供了 $arrFailed 参数,则验证失败的规则会存储在 $arrFailed 参数中:

  1. $arrFailed = null;   
  2. $bRet = Check::checkBatch( $Data, $arrCheck, true, $arrFailed );   
  3. G::dump( $arrFailed ); // 所有没有验证通过的规则  


5:扩展我们的验证器


系统提供了五十余个验证器,我们将会一一罗列下来。

如图:


  1. CheckAlnum.class.php | 是否是字母加数字   
  2.  - alnum   
  3.   
  4. CheckAlpha.class.php | 是否是字母   
  5.  - alpha   
  6.   
  7. CheckAscii.class.php | 是否为Ascii字符   
  8.  - ascii   
  9.   
  10. CheckBetween.class.php | 是否处于之间   
  11.  - between   
  12.   
  13. CheckBinary.class.php | 是否为二进制   
  14.  - binary   
  15.   
  16. CheckCntrl.class.php | 是否为控制符   
  17.  - cntrl   
  18.   
  19. CheckCurrencyclass.php | 是否是有效的货币格式   
  20.  - currency   
  21.   
  22. CheckDate.class.php | 是否是日期(yyyy/mm/dd、yyyy-mm-dd)   
  23.  - date  
  24.   
  25. CheckDatetime.class.php | 是否是日期 + 时间   
  26.  - datetime   
  27.   
  28. CheckDigit.class.php | 是否为有效的数字   
  29.  - digit   
  30.   
  31. CheckDomain.class.php | 是否是正确的域名格式   
  32.  - domain   
  33.   
  34. CheckDouble.class.php | 是否是double类型的数据   
  35.  - double   
  36.   
  37. CheckEmail.class.php | 是否是电子邮件地址   
  38.  - email   
  39.   
  40. CheckEnglish.class.php | 是否是英文字符   
  41.  - en   
  42.  - english   
  43.   
  44. CheckEqual.class.php | 是否等于指定值   
  45.  - equal   
  46.  - eq   
  47.   
  48. CheckFloat.class.php | 是否为浮点数   
  49.  - float   
  50.   
  51. CheckGraph.class.php | 是否为可见字符   
  52.  - graph   
  53.   
  54. CheckGreaterOrEqual.class.php | 大于等于某一个值   
  55.  - greater_or_equal   
  56.  - egt   
  57.   
  58. CheckGreaterThan.class.php | 大于某一个值   
  59.  - greater_than   
  60.  - gt   
  61.   
  62. CheckIn.class.php | 数据位于一个范围   
  63.  - in   
  64.   
  65. CheckInt2.class.php | 验证是否为整数   
  66.  - int2   
  67.   
  68. CheckInteger.class.php | 是否是正确的int类型    
  69.  - integer   
  70.  - int   
  71.   
  72. CheckIp.class.php | 是否是有效地Ip地址   
  73.  - ip   
  74.   
  75. CheckIpv4.class.php | 是否为Ipv4   
  76.  - ipv4   
  77.   
  78. CheckLessOrEqual.class.php | 值是否小于等于   
  79.  - less_or_equal   
  80.  - elt   
  81.   
  82. CheckLessThan.class.php | 值小于某一个值   
  83.  - less_than   
  84.  - lt   
  85.   
  86. CheckLower.class.php | 是否全部为小写   
  87.  - lower   
  88.   
  89. CheckMax.class.php | 数据的值是否小于等于最大值   
  90.  - max   
  91.   
  92. CheckMaxLength.class.php | 数据长度是否小于等于最大值   
  93.  - max_length   
  94.  - max-len   
  95.   
  96. CheckMin.class.php | 数据最小值   
  97.  - min   
  98.   
  99. CheckMinLength.class.php | 最小长度   
  100.  - min_length   
  101.  - min_len   
  102.   
  103. CheckMobile.class.php | 是否为有效的Mobile号码   
  104.  - mobile   
  105.   
  106. CheckNotEmpty.class.php | 值不能为空   
  107.  - not_empty   
  108.   
  109. CheckNotEqual.class.php | 验证两个数据是否不相等   
  110.  - not_equal   
  111.  - neq   
  112.   
  113. CheckNotNull.class.php | 是否不为null   
  114.  - not_null   
  115.   
  116. CheckNotSame.class.php | 验证两个数据是否不相同   
  117.  - not_same   
  118.   
  119. CheckNumber.class.php | 是否是数字   
  120.  - num   
  121.  - number   
  122.   
  123. CheckNumberUnderlineEnglish.class.php | 是否有字母,下划线,数字组成的字符串   
  124.  - number_underline_english   
  125.  - num_underline_en   
  126.  - num_un_en   
  127.  - n_u_e   
  128.  - nue   
  129.   
  130. CheckOctal.class.php | 是否是八进制格式   
  131.  - octal   
  132.   
  133. CheckPhone.class.php | 是否是有效的PHONE号码   
  134.  - phone   
  135.   
  136. CheckPrint.class.php | 是否是可打印的字符   
  137.  - print   
  138.   
  139. CheckPunct.class.php | 是否为标点符号   
  140.  - punct   
  141.   
  142. CheckQq.class.php.php | 是否是有效的QQ号码   
  143.  - qq   
  144.   
  145. CheckRegex.class.php | 正则验证   
  146.  - regex   
  147.   
  148. CheckRequire.class.php | require  
  149.  - 不能为空   
  150.   
  151. CheckSame.class.php | 验证两个数据是否一样   
  152.  - same   
  153.   
  154. CheckSkipEmpty.class.php | 如果为空(空字符串或者 null),则跳过余下的验证   
  155.  - emptyempty  
  156.   
  157. CheckSkipError.class.php | 跳过错误   
  158.  - error   
  159.   
  160. CheckSkipNull.class.php | 如果值为 NULL,则跳过余下的验证   
  161.  - null   
  162.   
  163. CheckStrlen.class.php | 是否是电子邮件地址   
  164.  - strlen  
  165.   
  166. CheckTime.class.php | 是否是时间(hh:mm:ss)   
  167.  - time   
  168.   
  169. CheckType.class.php | 验证值是否为特定的格式   
  170.  - type   
  171.   
  172. CheckUpper.class.php | 字符串是否全部为大写   
  173.  - upper   
  174.   
  175. CheckUrl.class.php | 是否是URL格式   
  176.  - url   
  177.   
  178. CheckUrl2.class.php | 是否是Url地址( URL验证有严格和不严格之分 )   
  179.  - url2   
  180.   
  181. CheckWhitespace.class.php | 是否为空白字符串   
  182.  - whitechspace   
  183.   
  184. CheckXdigits.class.php | 是否是十六进制数   
  185.  - xdigits   
  186.   
  187. CheckZip.class.php | 是否是有效zip支持的格式   
  188.  - zip   
  189.  - rar  

你会在Check.class.php后面,看到这样一句代码:
  1. /** 加载系统验证规则 */  
  2. Check::addCheckDir( dirname(__FILE__).'/CheckList/' ) ;  

如图:


同样,你可以在任意地方添加一个目录,里面放置自定义的验证器,这个可以参考系统提供的验证器。
同时,验证器目录必须有效,而且必须为物理路径,同时验证器必须符合我们验证器的命名规则。请你
根据系统的验证器依样化葫芦来做吧。


好了,写完了。感叹啊,写一篇教程真不容易,折腾人。