cakephp: 模型数据验证规则

 到目前位置Cake支持VALID_NOT_EMPTY, VALID_NUMBER, VALID_EMAIL, 和VALID_YEAR四个验证规则,Cake1.2新的验证类功能更强大,Cake 1.2中虽然VALID_NOT_EMPTY, VALID_NUMBER, VALID_EMAIL和VALID_YEAR四个验证规则仍然可用,但是已经不推荐再使用了(deprecated). 

/* *
 * Deprecated
 
*/

/* *
 * Not empty.
 
*/

    
define('VALID_NOT_EMPTY', '/.+/' );
/*
*
 * Numbers [0-9] only.
 
*/

    
define('VALID_NUMBER', '/^[-+]?/b[0-9]*/.?[0-9]+/b$/' );
/*
*
 * A valid email address.
 
*/

    
define('VALID_EMAIL', '//A(?:^([a-z0-9][a-z0-9_/-/./+]*)@([a-z0-9][a-z0-9/./-]{0,63}/.(com|org|net|biz|info|name|net|pro|aero|coop|museum|[a-z]{2,4}))$)/z/i' );
/*
*
 * A valid year (1000-2999).
 
*/

    
define('VALID_YEAR', '/^[12][0-9]{3}$/');

1.2 中新的验证规则的用法如下模式(在模型中): 

var $validate = array('field' => array('rule' => array('validationmethod', 'param1', 'param2')));

好了,让我们来看看验证方法:

1. alphaNumeric

仅允许字母和数字 

var $validate = array('username' => array('rule' => array('alphaNumeric')));

 2. between

对between的理解容易让人迷惑,看起来它像是检查一个数字的范围,但实际上它检查的是字符串长度的范围
下面的验证规则表示用户名称字符串允许至少3个,最多10个字符.

var $validate = array('username' => array('rule' => array('between', 3, 10)));

 3. blank

验证字符是否为空,或则仅包含空白字符,例如space,tab 

var $validate = array('x' => array('rule' => array('blank')));

 4. cc

检查信用卡号的有效性,例如Visa卡

var $validate = array('creditcard' => array('rule' => array('cc', array('visa'))));

 从validation.php源代码看,下面是目前支持的卡种:

$cards = array  (
    
'all' => array
 (
    
'amex' => '/^3[4|7]/d{13}$/',

    
'bankcard' => '/^56(10/d/d|022[1-5])/d{10}$/',
    
'diners' => '/^(?:3(0[0-5]|[68]/d)/d{11})|(?:5[1-5]/d{14})$/',
    
'disc' => '/^(?:6011|650/d)/d{12}$/',
    
'electron' => '/^(?:417500|4917/d{2}|4913/d{2})/d{10}$/',
    
'enroute' => '/^2(?:014|149)/d{11}$/',
    
'jcb' => '/^(3/d{4}|2100|1800)/d{11}$/',
    
'maestro' => '/^(?:5020|6/d{3})/d{12}$/',
    
'mc' => '/^5[1-5]/d{14}$/',
    
'solo' => '/^(6334[5-9][0-9]|6767[0-9]{2})/d{10}(/d{2,3})?$/',
    
'switch' => '/^(?:49(03(0[2-9]|3[5-9])|11(0[1-2]|7[4-9]|8[1-2])|36[0-9]{2})/d{10}(/d{2,3})?)|(?:564182/d{10}(/d{2,3})?)|(6(3(33[0-4][0-9])|759[0-9]{2})/d{10}(/d{2,3})?)$/',
    
'visa' => '/^4/d{12}(/d{3})?$/',
    
'voyager' => '/^8699[0-9]{11}$/'
    )
,
    
'fast' => '/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3(?:0[0-5]|[68][0-9])[0-9]{11}|3[47][0-9]{13})$/'
);

 5. comparison

用于比较数字值,它支持"is greater", "is less", "greater or equal", "less or equal", "is less", "equal to",
和"not equal",检查年龄是否大于18: 

var $validate = array('age' => array('rule' => array('comparison', '>=', 18 )));
#或则

var $validate = array('age' => array('rule' => array('comparison', 'greater or equal', 18)));

6. custom

你可以自己指定一个正则表达式

var $validate = array('username' => array('rule' => array('custom', '/^[0-9a-z]+$/i')));

7. date

检查日期的有效性,支持不同的格式,细节请查看validation类的api(http://api.cakephp.org/1.2/class_validation.html),
检查日期是否为'yyyy-mm-dd'格式

var $validate = array('startdate' => array('rule' => array('date', 'ymd')));

8. decimal

检查十进制数的有效性.如果你要使十进制数保持小数点后两位,可以这样做:

var $validate = array('price' => array('rule' => array('decimal', 2)));

9. email

这个就不解释了.

var $validate = array('email' => array('rule' => array('email')));

10. numeric

numeric是一个PHP is_numeric函数的封装.

var $validate = array('age' => array('rule' => array('numeric')));

11. phone

默认的,这个对我们没什么用,中国的电话号码和US不一样,但是Cake开发团队为我们想的足够多,我们可以加入对
我亲爱祖国的电话号码支持.

var $validate = array('phone' => array('rule' => array('phone', null, 'us')));

12. postal

邮政编码

一样的不支持ZH_CN的邮编,没办法,自己写个扩展吧,支持美国,加拿大,英国.
postal() 方法的源代码:


    function postal($check, $regex
= null, $country = null ) {
        
if
 (is_array($check)) {
            $
this->
_extract($check);
        } 
else
 {
            $
this->check =
 $check;
            $
this->regex =
 $regex;
            $
this->country =
 $country;
        }

        
if(is_null($this->
regex)) {
            
switch ($this->
country) {
                
case 'us'
:
                    $
this->regex  = '//A/b[0-9]{5}(?:-[0-9]{4})?/b/z/i'
;
                
break
;
                
case 'uk'
:
                    $
this->regex  = '//A/b[A-Z]{1,2}[0-9][A-Z0-9]? [0-9][ABD-HJLNP-UW-Z]{2}/b/z/i'
;
                
break
;
                
case 'ca'
:
                    $
this->regex  = '//A/b[ABCEGHJKLMNPRSTVXY][0-9][A-Z] [0-9][A-Z][0-9]/b/z/i'
;
                    
break
;
            }
        }
        
return $this->
_check();
    }

var $validate = array('zipcode' => array('rule' => array('postal', null, 'us')));

13. ssn

验证美国,丹麦,荷兰的社会安全号.

var $validate = array('ssn' => array('rule' => array('ssn', null, 'us')));

14. url

验证一个url的有效性

var $validate = array('website' => array('rule' => array('url')));

15. equalTo

目前该验证规则未实现

16. minLength

验证字符串的小长度,如果你要求用户名必须大于3个字符,你可以这样:

var $validate = array('username' => array('rule' => array('minLength', 3)));

17. maxLength

字符串允许的最大长度.例如,你运行用户名最多有20个字符:

var $validate = array('username' => array('rule' => array('maxLength', 20)));

18. multiple

未实现

19. number

未实现

20. userDefined
userDefined 貌似可以定义自己的验证规则,但现在,不知道如何使用它.

21. ip
验证ip地址

var $validate = array('ip' => array('rule' => 'ip'));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值