PHP验证类的封装与使用方法详解


Posted in PHP onJanuary 10, 2019

本文实例讲述了PHP验证类的封装与使用方法。分享给大家供大家参考,具体如下:

<?php
/**
 * Created by PhpStorm.
 * User: jiqing
 * Date: 18-7-24
 * Time: 下午4:36
 * 常用验证
 */
class Valid
{
 static protected $error;
 static protected $error_tips = [
  'tel' => '手机号格式有误',
  'email' => '邮箱格式有误',
  'max_len' => '参数长度不能超过最大长度',
  'min_len' => '参数长度不能小于最小长度',
  'required' => '缺少参数'
 ];
 // required|max_len,100|min_len,6
 public function validate($field, $rules)
 {
  $rules = explode('|', $rules);
  foreach ($rules as $rule) {
   $method = null;
   $param = null;
   // Check if we have rule parameters
   if (strstr($rule, ',') !== false) {
    $rule = explode(',', $rule);
    $method = 'check_'.$rule[0];
    $param = $rule[1];
    $rule = $rule[0];
   } else {
    $method = 'check_'.$rule;
   }
   $method_array = get_class_methods(new Valid());
   if (!in_array($method,$method_array)) {
    self::$error[] = "Method not exist.";
   }
   if (!self::$method($field,$param)) {
    self::$error[] = self::$error_tips[$rule] ? self::$error_tips[$rule] : '参数格式有误';
   }
  }
  if (count(self::$error) == 0) {
   return 0;
  }
  return self::$error[0]; // 返回第一个错误
 }
 public static function check_required($field) {
  if (isset($field) && ($field === false || $field === 0 || $field === 0.0 || $field === '0' || !empty($field))) {
   return true;
  } else {
   return false;
  }
 }
 public static function check_tel($field) {
  if(preg_match("/^1[345678]{1}\d{9}$/",$field)){
   return true;
  }else{
   return false;
  }
 }
 public static function check_email($field) {
  if(preg_match("/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/",$field)){
   return true;
  }else{
   return false;
  }
 }
 public static function check_max_len($field,$param = null) {
  if (function_exists('mb_strlen')) {
   if (mb_strlen($field) <= (int) $param) {
    return true;
   } else {
    return false;
   }
  } else {
   if (strlen($field) <= (int) $param) {
    return true;
   } else {
    return false;
   }
  }
 }
 public static function check_min_len($field,$param = null) {
  if (function_exists('mb_strlen')) {
   if (mb_strlen($field) >= (int) $param) {
    return true;
   } else {
    return false;
   }
  } else {
   if (strlen($field) >= (int) $param) {
    return true;
   } else {
    return false;
   }
  }
 }
 public static function check_regex($field, $param = null)
 {
  $regex = $param;
  if (preg_match($regex, $field)) {
   return true;
  } else {
   return false;
  }
 }
}

基本满足需求。

vendor('Func.Valid');
if ($res = Valid::validate('152','required|regex,/^1[345678]{1}\d{9}$/')) {
 $this->json->setErr(10001,$res);
 $this->json->Send();
}

封装很有意思,这个类唯一的亮点,就是可以复合验证。并且支持正则。而且里面的验证方法还可以单独使用。

vendor('Func.Valid');
if (!Valid::check_tel('152')) {
 $this->json->setErr(10001,'手机号有误');
 $this->json->Send();
}

勇敢的封装,利国利民。

继续封装,支持数组传参。

<?php
/**
 * Created by PhpStorm.
 * User: jiqing
 * Date: 18-7-24
 * Time: 下午4:36
 * 常用验证
 */
class Valid
{
 static protected $error;
 static protected $error_tips = [
  'tel' => '手机号格式有误',
  'email' => '邮箱格式有误',
  'max_len' => '参数长度不能超过最大长度',
  'min_len' => '参数长度不能小于最小长度',
  'required' => '缺少参数'
 ];
 /**
  * @param $validators array array('email' => 'required|valid_email')
  * @param $input array post数据
  * @return string
  */
 public function is_valid($validators, $input) {
  foreach ($validators as $field => $rules) {
   if (!isset($input[$field]) || empty($input[$field])) {
    self::$error[] = "缺少参数";
   }
   $rules = explode('|', $rules);
   foreach ($rules as $rule) {
    $method = null;
    $param = null;
    // Check if we have rule parameters
    if (strstr($rule, ',') !== false) {
     $rule = explode(',', $rule);
     $method = 'check_'.$rule[0];
     $param = $rule[1];
     $rule = $rule[0];
    } else {
     $method = 'check_'.$rule;
    }
    $method_array = get_class_methods(new Valid());
    if (!in_array($method,$method_array)) {
     self::$error[] = "Method not exist.";
    }
    if (!self::$method($input[$field],$param)) {
     self::$error[] = self::$error_tips[$rule] ? self::$error_tips[$rule] : '参数格式有误';
    }
   }
  }
  if (count(self::$error) == 0) {
   return 0;
  }
  return self::$error[0]; // 返回第一个错误
 }
 /**
  * @param $field string 验证字段
  * @param $rules string 验证规则 required|max_len,100|min_len,6
  * @return string
  */
 public function validate($field, $rules)
 {
  $rules = explode('|', $rules);
  foreach ($rules as $rule) {
   $method = null;
   $param = null;
   // Check if we have rule parameters
   if (strstr($rule, ',') !== false) {
    $rule = explode(',', $rule);
    $method = 'check_'.$rule[0];
    $param = $rule[1];
    $rule = $rule[0];
   } else {
    $method = 'check_'.$rule;
   }
   $method_array = get_class_methods(new Valid());
   if (!in_array($method,$method_array)) {
    self::$error[] = "Method not exist.";
   }
   if (!self::$method($field,$param)) {
    self::$error[] = self::$error_tips[$rule] ? self::$error_tips[$rule] : '参数格式有误';
   }
  }
  if (count(self::$error) == 0) {
   return 0;
  }
  return self::$error[0]; // 返回第一个错误
 }
 public static function check_required($field) {
  if (isset($field) && ($field === false || $field === 0 || $field === 0.0 || $field === '0' || !empty($field))) {
   return true;
  } else {
   return false;
  }
 }
 /**
  * 简写
  * @param $field
  * @return bool
  */
 public static function check_r($field) {
  if (isset($field) && ($field === false || $field === 0 || $field === 0.0 || $field === '0' || !empty($field))) {
   return true;
  } else {
   return false;
  }
 }
 public static function check_tel($field) {
  if(preg_match("/^1[345678]{1}\d{9}$/",$field)){
   return true;
  }else{
   return false;
  }
 }
 public static function check_email($field) {
  if(preg_match("/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/",$field)){
   return true;
  }else{
   return false;
  }
 }
 public static function check_max_len($field,$param = null) {
  if (function_exists('mb_strlen')) {
   if (mb_strlen($field) <= (int) $param) {
    return true;
   } else {
    return false;
   }
  } else {
   if (strlen($field) <= (int) $param) {
    return true;
   } else {
    return false;
   }
  }
 }
 public static function check_min_len($field,$param = null) {
  if (function_exists('mb_strlen')) {
   if (mb_strlen($field) >= (int) $param) {
    return true;
   } else {
    return false;
   }
  } else {
   if (strlen($field) >= (int) $param) {
    return true;
   } else {
    return false;
   }
  }
 }
 public static function check_regex($field, $param = null)
 {
  $regex = $param;
  if (preg_match($regex, $field)) {
   return true;
  } else {
   return false;
  }
 }
}

使用如下

vendor('Func.Valid');
$validators = [
 'tel' => 'required|tel',
 'name' => 'required',
 'email' => 'r|email',
 'password' => 'r|min_len,6|max_len,12'
];
if ($err = Valid::is_valid($validators,$_POST)) {
 $this->json->setErr(10001,$err);
 $this->json->Send();
}

PHP验证类的封装与使用方法详解

继续优化!支持错误提示中,添加参数。

<?php
/**
 * Created by PhpStorm.
 * User: jiqing
 * Date: 18-7-24
 * Time: 下午4:36
 * 常用验证
 */
class Valid
{
 static protected $error;
 /**
  * @param $validators array array('email' => 'required|valid_email')
  * @param $input array post数据
  * @return string
  */
 public function is_valid($validators, $input) {
  foreach ($validators as $field => $rules) {
   if (!isset($input[$field]) || empty($input[$field])) {
    self::$error[] = "缺少参数";
   }
   $rules = explode('|', $rules);
   foreach ($rules as $rule) {
    $method = null;
    $param = null;
    // Check if we have rule parameters
    if (strstr($rule, ',') !== false) {
     $rule = explode(',', $rule);
     $method = 'check_'.$rule[0];
     $param = $rule[1];
     $rule = $rule[0];
    } else {
     $method = 'check_'.$rule;
    }
    $method_array = get_class_methods(new Valid());
    if (!in_array($method,$method_array)) {
     self::$error[] = "Method not exist.";
    }
    if (!self::$method($input[$field],$param)) {
     self::$error[] = self::get_error_tips($rule,$param);
    }
   }
  }
  if (count(self::$error) == 0) {
   return 0;
  }
  return self::$error[0]; // 返回第一个错误
 }
 /**
  * @param $field string 验证字段
  * @param $rules string 验证规则 required|max_len,100|min_len,6
  * @return string
  */
 public function validate($field, $rules)
 {
  $rules = explode('|', $rules);
  foreach ($rules as $rule) {
   $method = null;
   $param = null;
   // Check if we have rule parameters
   if (strstr($rule, ',') !== false) {
    $rule = explode(',', $rule);
    $method = 'check_'.$rule[0];
    $param = $rule[1];
    $rule = $rule[0];
   } else {
    $method = 'check_'.$rule;
   }
   $method_array = get_class_methods(new Valid());
   if (!in_array($method,$method_array)) {
    self::$error[] = "Method not exist.";
   }
   if (!self::$method($field,$param)) {
    self::$error[] = self::get_error_tips($rule,$param);
   }
  }
  if (count(self::$error) == 0) {
   return 0;
  }
  return self::$error[0]; // 返回第一个错误
 }
 /**
  * 灵活获取参数
  * @param $rule
  * @param $param
  */
 public static function get_error_tips($rule,$param) {
  $error_tips = [
   'tel' => '手机号格式有误',
   'email' => '邮箱格式有误',
   'max_len' => '参数长度不能超过最大长度'.$param,
   'min_len' => '参数长度不能小于最小长度'.$param,
   'required' => '缺少参数',
   'r' => '缺少参数'
  ];
  return $error_tips[$rule] ? $error_tips[$rule] : '参数格式有误';
 }
 public static function check_required($field) {
  if (isset($field) && ($field === false || $field === 0 || $field === 0.0 || $field === '0' || !empty($field))) {
   return true;
  } else {
   return false;
  }
 }
 /**
  * 简写
  * @param $field
  * @return bool
  */
 public static function check_r($field) {
  if (isset($field) && ($field === false || $field === 0 || $field === 0.0 || $field === '0' || !empty($field))) {
   return true;
  } else {
   return false;
  }
 }
 public static function check_tel($field) {
  if(preg_match("/^1[345678]{1}\d{9}$/",$field)){
   return true;
  }else{
   return false;
  }
 }
 public static function check_email($field) {
  if(preg_match("/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/",$field)){
   return true;
  }else{
   return false;
  }
 }
 public static function check_max_len($field,$param = null) {
  if (function_exists('mb_strlen')) {
   if (mb_strlen($field) <= (int) $param) {
    return true;
   } else {
    return false;
   }
  } else {
   if (strlen($field) <= (int) $param) {
    return true;
   } else {
    return false;
   }
  }
 }
 public static function check_min_len($field,$param = null) {
  if (function_exists('mb_strlen')) {
   if (mb_strlen($field) >= (int) $param) {
    return true;
   } else {
    return false;
   }
  } else {
   if (strlen($field) >= (int) $param) {
    return true;
   } else {
    return false;
   }
  }
 }
 public static function check_regex($field, $param = null)
 {
  $regex = $param;
  if (preg_match($regex, $field)) {
   return true;
  } else {
   return false;
  }
 }
}

PHP验证类的封装与使用方法详解

PHP 相关文章推荐
使用MaxMind 根据IP地址对访问者定位
Oct 09 PHP
鸡肋的PHP单例模式应用详解
Jun 03 PHP
php根据某字段对多维数组进行排序的方法
Mar 07 PHP
PHP数组函数知识汇总
May 12 PHP
thinkPHP线上自动加载异常与修复方法实例分析
Dec 01 PHP
php+resumablejs实现的分块上传 断点续传功能示例
Apr 18 PHP
phpmyadmin下载、安装、配置教程
May 16 PHP
PHP创建自己的Composer包方法
Apr 09 PHP
Yii1.1框架实现PHP极光推送消息通知功能
Sep 06 PHP
laravel实现按月或天或小时统计mysql数据的方法
Oct 09 PHP
PHP学习记录之常用的魔术常量详解
Dec 12 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
Jan 10 #PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
Jan 10 #PHP
tp5框架使用composer实现日志记录功能示例
Jan 10 #PHP
PHP微信支付结果通知与回调策略分析
Jan 10 #PHP
php如何利用pecl安装mongodb扩展详解
Jan 09 #PHP
PHP如何通过表单直接提交大文件详解
Jan 08 #PHP
Laravel 队列使用的实现
Jan 08 #PHP
You might like
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
js实现ASP分页函数 HTML分页函数
2006/09/22 Javascript
关于eval 与new Function 到底该选哪个?
2013/04/17 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
2016/06/20 Javascript
创建一般js对象的几种方式
2017/01/19 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
nodejs对express中next函数的一些理解
2017/09/08 NodeJs
基于JavaScript中标识符的命名规则介绍
2018/01/06 Javascript
基于vue中css预加载使用sass的配置方式详解
2018/03/13 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
2018/11/01 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
js实现简易ATM功能
2020/10/27 Javascript
Python进行数据科学工作的简单入门教程
2015/04/01 Python
numpy.random.seed()的使用实例解析
2018/02/03 Python
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
python 获取字符串MD5值方法
2018/05/29 Python
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
产品销售员岗位职责
2013/12/18 职场文书
初中校园广播稿
2014/02/02 职场文书
我爱读书演讲稿
2014/05/07 职场文书
应届生求职信范文
2014/06/30 职场文书
2016年小学生教师节广播稿
2015/12/18 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
Python源码解析之List
2021/05/21 Python
python运算符之与用户交互
2022/04/13 Python