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 相关文章推荐
PHP 创建标签云函数代码
May 26 PHP
php中实现记住密码自动登录的代码
Mar 02 PHP
php时区转换转换函数
Jan 07 PHP
PHP中比较时间大小实例
Aug 21 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
Sep 16 PHP
WIFI万能钥匙密码查询接口实例
Sep 28 PHP
PHP身份证校验码计算方法
Aug 10 PHP
PHP编程 SSO详细介绍及简单实例
Jan 13 PHP
PHP getDocNamespaces()函数讲解
Feb 03 PHP
详解PHP的抽象类和抽象方法以及接口总结
Mar 15 PHP
php的扩展写法总结
May 14 PHP
php字符串截取函数mb_substr用法实例分析
Jun 25 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
网站当前的在线人数
2006/10/09 PHP
PHP 中英文混合排版中处理字符串常用的函数
2007/04/12 PHP
php处理restful请求的路由类分享
2014/02/27 PHP
php给每个段落添加空格的方法
2015/03/20 PHP
双冒号 ::在PHP中的使用情况
2015/11/05 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
JS实现div居中示例
2014/04/17 Javascript
JavaScript模块随意拖动示例代码
2014/05/27 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
JS实现获取当前所在周的周六、周日示例分析
2019/05/11 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 jQuery
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
[57:53]Secret vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
用CSS3的box-reflect设置文字倒影效果的方法讲解
2016/03/07 HTML / CSS
婚鞋、新娘鞋、礼服鞋、童鞋:Nina Shoes
2019/09/04 全球购物
东方红海科技面试题软件测试方面
2012/02/08 面试题
乡镇办公室工作决心书
2014/03/11 职场文书
节约能源标语
2014/06/17 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
2014年小学校长工作总结
2014/12/08 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书
小学英语教学经验交流材料
2015/11/02 职场文书
严以律己专题学习研讨会发言材料
2015/11/09 职场文书
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python