php可扩展的验证类实例(可对邮件、手机号、URL等验证)
本文实例讲述了php可扩展的验证类。分享给大家供大家参考。具体分析如下:
这里介绍一个可扩展的php验证类,
类里面可以的各类验证可自行调整实现,现在为基本实现方式。
需要添加规则的话,直接定义方法,方法名即为规则名称。具体参考使用方法。
require_once('./Validator.class.php');
$data=array(
'nickname'=>'heno',
'realname'=>'steven',
'age'=>25,
'mobile'=>'1521060426');
$validator=newValidator($data);
$validator->setRule('nickname','required');
$validator->setRule('realname',array('length'=>array(1,6),'required'));
$validator->setRule('age',array('required','digit'));
$validator->setRule('mobile',array('mobile'));
$result=$validator->validate();
var_dump($result);
var_dump($validator->getResultInfo());
Validator.class.php文件如下:
<?php
/**
*Validator数据验证类
*@packagelibrary
*@categorylibrary
*@authorSteven
*@version1.0
*/
/**
*Validator数据验证类
*@packagelibrary
*@categorylibrary
*@authorSteven
*@version1.0
*/
classValidator{
/**
*待校验数据
*@vararray
*/
private$_data;
/**
*校验规则
*@vararray
*/
private$_ruleList=null;
/**
*校验结果
*@varbool
*/
private$_result=null;
/**
*校验数据信息
*@vararray
*/
private$_resultInfo=array();
/**
*构造函数
*@paramarray$data待校验数据
*/
publicfunction__construct($data=null)
{
if($data){
$this->_data=$data;
}
}
/**
*设置校验规则
*@paramstring$var带校验项key
*@parammixed$rule校验规则
*@returnvoid
*/
publicfunctionsetRule($var,$rule)
{
$this->_ruleList[$var]=$rule;
}
/**
*检验数据
*@paramarray$data
*<code>
*$data=array('nickname'=>'heno','realname'=>'steven','age'=>25);
*$validator=newValidator($data);
*$validator->setRule('nickname','required');
*$validator->setRule('realname',array('lenght'=>array(1,4),'required'));
*$validator->setRule('age',array('required','digit'));
*$result=$validator->validate();
*var_dump($validator->getResultInfo());
*</code>
*@returnbool
*/
publicfunctionvalidate($data=null)
{
$result=true;
/*如果没有设置校验规则直接返回true*/
if($this->_ruleList===null||!count($this->_ruleList)){
return$result;
}
/*已经设置规则,则对规则逐条进行校验*/
foreach($this->_ruleListas$ruleKey=>$ruleItem){
/*如果检验规则为单条规则*/
if(!is_array($ruleItem)){
$ruleItem=trim($ruleItem);
if(method_exists($this,$ruleItem)){
/*校验数据,保存校验结果*/
$tmpResult=$this->$ruleItem($ruleKey);
if(!$tmpResult){
$this->_resultInfo[$ruleKey][$ruleItem]=$tmpResult;
$result=false;
}
}
continue;
}
/*校验规则为多条*/
foreach($ruleItemas$ruleItemKey=>$rule){
if(!is_array($rule)){
$rule=trim($rule);
if(method_exists($this,$rule)){
/*校验数据,设置结果集*/
$tmpResult=$this->$rule($ruleKey);
if(!$tmpResult){
$this->_resultInfo[$ruleKey][$rule]=$tmpResult;
$result=false;
}
}
}else{
if(method_exists($this,$ruleItemKey)){
/*校验数据,设置结果集*/
$tmpResult=$this->$ruleItemKey($ruleKey,$rule);
if(!$tmpResult){
$this->_resultInfo[$ruleKey][$ruleItemKey]=$tmpResult;
$result=false;
}
}
}
}
}
return$result;
}
/**
*获取校验结果数据
*@return[type][description]
*/
publicfunctiongetResultInfo()
{
return$this->_resultInfo;
}
/**
*校验必填参数
*@paramstring$varName校验项
*@returnbool
*/
publicfunctionrequired($varName)
{
$result=false;
if(is_array($this->_data)&&isset($this->_data[$varName])){
$result=true;
}
return$result;
}
/**
*校验参数长度
*
*@paramstring$varName校验项
*@paramarray$lengthDataarray($minLen,$maxLen)
*@returnbool
*/
publicfunctionlength($varName,$lengthData)
{
$result=true;
/*如果该项没有设置,默认为校验通过*/
if($this->required($varName)){
$varLen=mb_strlen($this->_data[$varName]);
$minLen=$lengthData[0];
$maxLen=$lengthData[1];
if($varLen<$minLen||$varLen>$maxLen){
$result=true;
}
}
return$result;
}
/**
*校验邮件
*@paramstring$varName校验项
*@returnbool
*/
publicfunctionemail($varName)
{
$result=true;
/*如果该项没有设置,默认为校验通过*/
if($this->required($varName)){
$email=trim($this->_data[$varName]);
if(preg_match('/^[-\w]+?@[-\w.]+?$/',$email)){
$result=false;
}
}
return$result;
}
/**
*校验手机
*@paramstring$varName校验项
*@returnbool
*/
publicfunctionmobile($varName)
{
$result=true;
/*如果该项没有设置,默认为校验通过*/
if($this->required($varName)){
$mobile=trim($this->_data[$varName]);
if(!preg_match('/^1[3458]\d{10}$/',$mobile)){
$result=false;
}
}
return$result;
}
/**
*校验参数为数字
*@paramstring$varName校验项
*@returnbool
*/
publicfunctiondigit($varName)
{
$result=false;
if($this->required($varName)&&is_numeric($this->_data[$varName])){
$result=true;
}
return$result;
}
/**
*校验参数为身份证
*@paramstring$varName校验项
*@returnbool
*/
publicfunctionID($ID)
{
}
/**
*校验参数为URL
*@paramstring$varName校验项
*@returnbool
*/
publicfunctionurl($url)
{
$result=true;
/*如果该项没有设置,默认为校验通过*/
if($this->required($varName)){
$url=trim($this->_data[$varName]);
if(!preg_match('/^(http[s]?::)?\w+?(\.\w+?)$/',$url)){
$result=false;
}
}
return$result;
}
}
?>
希望本文所述对大家的php程序设计有所帮助。