搜索
系统检测到您的用户名不符合规范:

ThinkPHP5 通用验证器

浏览:10379 发布日期:2017年02月14日 分类:ThinkPHP5专区 关键字: ThinkPHP5,TP5验证器
最近有用TP5写一下平台,按开发手册那样写验证器太麻烦了,于是在原有的validate类上扩展了一通用的验证器类,希望大神们能指点一二<?php
namespace app\common\validate;
/**
* ============================================================================
* HSH.Sass平台
* 版权所有
* 官网地址:
* 交流社区:
* 作者: Wolk He
* 联系QQ:316625556
* ============================================================================
* 通用验证器
*/
use think\Validate;
use think\Exception;
class BaseValidate extends Validate
{
protected $rule = [];
protected $data = [];
protected $flag = true;

//预定义所有字段的错误提示
public static $msg = [
'require' => [
'username' => '请输入登录帐号',
'email' => '请输入邮箱地址',
'phone' => '请输入手机号码',
'password' => '请输入登录密码',
'repassword' => '请输入确认密码',
'code' => '请输入验证码',
//......
],
'regex' => [
'email' => '邮箱格式错误',
'phone' => '手机号码格式错误',
'tel' => '电话号码格式错误',
'username' => '帐号格式错误',
'idcard' => '邮箱格式错误',
//......
],
];

//预定义所有指定字段的正则表达式
protected $preg = [
'email' => '/^([\w\.\_]+)@(\w{1,})(\.[a-z]{2,4})+$/',
'phone' => '/^1[34578]{1}[0-9]{9}$/',
'tel' => '',
'username' => '/^[\w][\w\@\_\.]{5,31}$/',
'idcard' => '/^\d{6}((19[2-9]\d[0-1]\d[0-3]\d(\d{4}|(\d{3}(\d|X|x))))|(\d{2}[0-1]\d[0-3]\d{4}))$/',
//......
];

/**
**获取错误提示
* @param [str] $data 验证类型
* @param [str] $fields 指定字段
* @return [type] [description]
*/
private function getErrorMsg($ruleName, $field)
{
if(isset(self::$msg[$ruleName][$field]) && !empty(self::$msg[$ruleName][$field])){
return self::$msg[$ruleName][$field];
}else{
throw new Exception($field.'错误提示尚未定义');
}
}

/**
**重置data属性值
* @param [arr] $data 需要验证的数组
* @param [arr||str] $fields 字段过虑
* @param boolean $bool true验证fields的字段,false验证除fields外的字段
* @return [type] [description]
*/
private function setData($data, $fields, $bool=ture)
{
if(!empty($this->data) && !empty($data)){
if(!array_intersect($this->data, $data)){
if(!empty($fields)){
if(is_bool($fields)){
$bool = $fields;
$fields = $data;
$data = $this->data;
}else{
throw new Exception('Parameter error');
}
}else{
$fields = $data;
$data = $this->data;
}
}
}else if(empty($data)){
$data = $this->data;
}else{
$this->data = $data;
}
if(empty($data)){
throw new Exception('Missing parameter');
}
$rs[0] = $data;
$rs[1] = $fields;
$rs[2] = $bool;
return $rs;
}

//添加错误提示
public function setErrorMsg(array $data)
{

}

//初始化
public function data(array $data)
{
$this->data = $data;
return $this;
}

/**
**非空验证
* @param [arr] $data 需要验证的数组
* @param [arr||str] $fields 字段过虑
* @param boolean $bool true验证fields的字段,false验证除fields外的字段
* @return [type] [description]
*/
public function checkRequire(array $data=[], $fields=[], $bool=true)
{
if($this->flag){
list($data, $fields, $bool) = $this->setData($data, $fields, $bool);
$this->rule = [];
$rule = [];
if(!empty($fields)){
if(is_string($fields)){
$fields = explode(',', $fields);
}
foreach($fields as $k=>$v){
if(array_key_exists($v, $data)){
if($bool){
$rule[] = [strtolower($v), 'require', $this->getErrorMsg('require', $v)];
}else{
unset($data[$v]);
}
}else{
if($bool){
unset($data[$v]);
}else{
$rule[] = [strtolower($v), 'require', $this->getErrorMsg('require', $v)];
}
}
}
}else{
foreach($data as $k=>$v){
$rule[] = [strtolower($k), 'require', $this->getErrorMsg('require', $k)];
}
}
$this->rule = $rule;
if(false == $this->check($data)){
$this->flag = false;
}
}
return $this;
}

/**
**正则验证
* @param [arr] $data 需要验证的数组
* @param [arr||str] $fields 字段过虑
* @param boolean $bool true验证fields的字段,false验证除fields外的字段
* @return [type] [description]
*/
public function checkRegex(array $data=[], $fields=[], $bool=true)
{
if($this->flag){
list($data, $fields, $bool) = $this->setData($data, $fields, $bool);
$this->rule = [];
$rule = [];
if(!empty($fields)){
// if(is_string($fields)){
// $fields = explode(',', $fields);
// }
foreach($fields as $k=>$v){
$preg = $this->preg[$v];
if(array_key_exists($v, $data)){
if($bool){
self::setTypeMsg('regex', $this->getErrorMsg('regex', $v));
if(strpos($preg, '|') !== false){
$rule[strtolower($v)] = ['regex'=>$preg];
}else{
$rule[strtolower($v)] = 'regex:'.$preg;
}
}else{
unset($data[$v]);
}
}else{
if($bool){
unset($data[$v]);
}else{
self::setTypeMsg('regex', $this->getErrorMsg('regex', $v));
if(strpos($preg, '|') !== false){
$rule[] = [strtolower($v)=>['regex'=>$preg]];
}else{
$rule[] = [strtolower($v)=>'regex:'.$preg];
}
}
}
}
}else{
throw new Exception('Missing parameter');
}
$this->rule = $rule;
if(false == $this->check($data)){
$this->flag = false;
}
}
return $this;
}

/**
**验证两个字段的值是否相等
* @param [arr] $data 需要验证的数组
* @param [arr] $fields 要比较的两个字段
* @return [type] [description]
*/
public function checkEqual(array $data=[], $fields=[])
{
if($this->flag){
if(empty($data) && empty($fields)){
throw new Exception('Missing parameter');
}
list($data, $fields) = $this->setData($data, $fields, true);
$rule[$fields[0]] = 'confirm:'.$fields[1];
$this->rule = $rule;
self::setTypeMsg('confirm','确认密码输入错误');
if(false == $this->check($data)){
$this->flag = false;
}
}
return $this;
}

//链式终结
public function end()
{
return $this->flag;
}

}
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
18664002500
积分:280 等级:LV1
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /