到目前位置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 中新的验证规则的用法如下模式(在模型中):
好了,让我们来看看验证方法:
1. alphaNumeric
仅允许字母和数字
2. between
对between的理解容易让人迷惑,看起来它像是检查一个数字的范围,但实际上它检查的是字符串长度的范围
下面的验证规则表示用户名称字符串允许至少3个,最多10个字符.
3. blank
验证字符是否为空,或则仅包含空白字符,例如space,tab
4. cc
检查信用卡号的有效性,例如Visa卡
从validation.php源代码看,下面是目前支持的卡种:
'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', 'greater or equal', 18)));
6. custom
你可以自己指定一个正则表达式
7. date
检查日期的有效性,支持不同的格式,细节请查看validation类的api(http://api.cakephp.org/1.2/class_validation.html),
检查日期是否为'yyyy-mm-dd'格式
8. decimal
检查十进制数的有效性.如果你要使十进制数保持小数点后两位,可以这样做:
9. email
这个就不解释了.
10. numeric
numeric是一个PHP is_numeric函数的封装.
11. phone
默认的,这个对我们没什么用,中国的电话号码和US不一样,但是Cake开发团队为我们想的足够多,我们可以加入对
我亲爱祖国的电话号码支持.
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();
}
13. ssn
验证美国,丹麦,荷兰的社会安全号.
14. url
验证一个url的有效性
15. equalTo
目前该验证规则未实现
16. minLength
验证字符串的小长度,如果你要求用户名必须大于3个字符,你可以这样:
17. maxLength
字符串允许的最大长度.例如,你运行用户名最多有20个字符:
18. multiple
未实现
19. number
未实现
20. userDefined
userDefined 貌似可以定义自己的验证规则,但现在,不知道如何使用它.
21. ip
验证ip地址