• 售前

  • 售后

热门帖子
入门百科

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

[复制链接]
蓝胖子685 显示全部楼层 发表于 2021-10-26 13:43:08 |阅读模式 打印 上一主题 下一主题
本文实例讲述了PHP验证类的封装与使用方法。分享给大家供大家参考,详细如下:
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: jiqing
  5. * Date: 18-7-24
  6. * Time: 下午4:36
  7. * 常用验证
  8. */
  9. class Valid
  10. {
  11. static protected $error;
  12. static protected $error_tips = [
  13.   'tel' => '手机号格式有误',
  14.   'email' => '邮箱格式有误',
  15.   'max_len' => '参数长度不能超过最大长度',
  16.   'min_len' => '参数长度不能小于最小长度',
  17.   'required' => '缺少参数'
  18. ];
  19. // required|max_len,100|min_len,6
  20. public function validate($field, $rules)
  21. {
  22.   $rules = explode('|', $rules);
  23.   foreach ($rules as $rule) {
  24.    $method = null;
  25.    $param = null;
  26.    // Check if we have rule parameters
  27.    if (strstr($rule, ',') !== false) {
  28.     $rule = explode(',', $rule);
  29.     $method = 'check_'.$rule[0];
  30.     $param = $rule[1];
  31.     $rule = $rule[0];
  32.    } else {
  33.     $method = 'check_'.$rule;
  34.    }
  35.    $method_array = get_class_methods(new Valid());
  36.    if (!in_array($method,$method_array)) {
  37.     self::$error[] = "Method not exist.";
  38.    }
  39.    if (!self::$method($field,$param)) {
  40.     self::$error[] = self::$error_tips[$rule] ? self::$error_tips[$rule] : '参数格式有误';
  41.    }
  42.   }
  43.   if (count(self::$error) == 0) {
  44.    return 0;
  45.   }
  46.   return self::$error[0]; // 返回第一个错误
  47. }
  48. public static function check_required($field) {
  49.   if (isset($field) && ($field === false || $field === 0 || $field === 0.0 || $field === '0' || !empty($field))) {
  50.    return true;
  51.   } else {
  52.    return false;
  53.   }
  54. }
  55. public static function check_tel($field) {
  56.   if(preg_match("/^1[345678]{1}\d{9}$/",$field)){
  57.    return true;
  58.   }else{
  59.    return false;
  60.   }
  61. }
  62. public static function check_email($field) {
  63.   if(preg_match("/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/",$field)){
  64.    return true;
  65.   }else{
  66.    return false;
  67.   }
  68. }
  69. public static function check_max_len($field,$param = null) {
  70.   if (function_exists('mb_strlen')) {
  71.    if (mb_strlen($field) <= (int) $param) {
  72.     return true;
  73.    } else {
  74.     return false;
  75.    }
  76.   } else {
  77.    if (strlen($field) <= (int) $param) {
  78.     return true;
  79.    } else {
  80.     return false;
  81.    }
  82.   }
  83. }
  84. public static function check_min_len($field,$param = null) {
  85.   if (function_exists('mb_strlen')) {
  86.    if (mb_strlen($field) >= (int) $param) {
  87.     return true;
  88.    } else {
  89.     return false;
  90.    }
  91.   } else {
  92.    if (strlen($field) >= (int) $param) {
  93.     return true;
  94.    } else {
  95.     return false;
  96.    }
  97.   }
  98. }
  99. public static function check_regex($field, $param = null)
  100. {
  101.   $regex = $param;
  102.   if (preg_match($regex, $field)) {
  103.    return true;
  104.   } else {
  105.    return false;
  106.   }
  107. }
  108. }
复制代码
根本满足需求。
  1. vendor('Func.Valid');
  2. if ($res = Valid::validate('152','required|regex,/^1[345678]{1}\d{9}$/')) {
  3. $this->json->setErr(10001,$res);
  4. $this->json->Send();
  5. }
复制代码
封装很有意思,这个类唯一的亮点,就是可以复合验证。而且支持正则。而且内里的验证方法还可以单独使用。
  1. vendor('Func.Valid');
  2. if (!Valid::check_tel('152')) {
  3. $this->json->setErr(10001,'手机号有误');
  4. $this->json->Send();
  5. }
复制代码
勇敢的封装,利国利民。
继续封装,支持数组传参。
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: jiqing
  5. * Date: 18-7-24
  6. * Time: 下午4:36
  7. * 常用验证
  8. */
  9. class Valid
  10. {
  11. static protected $error;
  12. static protected $error_tips = [
  13.   'tel' => '手机号格式有误',
  14.   'email' => '邮箱格式有误',
  15.   'max_len' => '参数长度不能超过最大长度',
  16.   'min_len' => '参数长度不能小于最小长度',
  17.   'required' => '缺少参数'
  18. ];
  19. /**
  20.   * @param $validators array array('email' => 'required|valid_email')
  21.   * @param $input array post数据
  22.   * @return string
  23.   */
  24. public function is_valid($validators, $input) {
  25.   foreach ($validators as $field => $rules) {
  26.    if (!isset($input[$field]) || empty($input[$field])) {
  27.     self::$error[] = "缺少参数";
  28.    }
  29.    $rules = explode('|', $rules);
  30.    foreach ($rules as $rule) {
  31.     $method = null;
  32.     $param = null;
  33.     // Check if we have rule parameters
  34.     if (strstr($rule, ',') !== false) {
  35.      $rule = explode(',', $rule);
  36.      $method = 'check_'.$rule[0];
  37.      $param = $rule[1];
  38.      $rule = $rule[0];
  39.     } else {
  40.      $method = 'check_'.$rule;
  41.     }
  42.     $method_array = get_class_methods(new Valid());
  43.     if (!in_array($method,$method_array)) {
  44.      self::$error[] = "Method not exist.";
  45.     }
  46.     if (!self::$method($input[$field],$param)) {
  47.      self::$error[] = self::$error_tips[$rule] ? self::$error_tips[$rule] : '参数格式有误';
  48.     }
  49.    }
  50.   }
  51.   if (count(self::$error) == 0) {
  52.    return 0;
  53.   }
  54.   return self::$error[0]; // 返回第一个错误
  55. }
  56. /**
  57.   * @param $field string 验证字段
  58.   * @param $rules string 验证规则 required|max_len,100|min_len,6
  59.   * @return string
  60.   */
  61. public function validate($field, $rules)
  62. {
  63.   $rules = explode('|', $rules);
  64.   foreach ($rules as $rule) {
  65.    $method = null;
  66.    $param = null;
  67.    // Check if we have rule parameters
  68.    if (strstr($rule, ',') !== false) {
  69.     $rule = explode(',', $rule);
  70.     $method = 'check_'.$rule[0];
  71.     $param = $rule[1];
  72.     $rule = $rule[0];
  73.    } else {
  74.     $method = 'check_'.$rule;
  75.    }
  76.    $method_array = get_class_methods(new Valid());
  77.    if (!in_array($method,$method_array)) {
  78.     self::$error[] = "Method not exist.";
  79.    }
  80.    if (!self::$method($field,$param)) {
  81.     self::$error[] = self::$error_tips[$rule] ? self::$error_tips[$rule] : '参数格式有误';
  82.    }
  83.   }
  84.   if (count(self::$error) == 0) {
  85.    return 0;
  86.   }
  87.   return self::$error[0]; // 返回第一个错误
  88. }
  89. public static function check_required($field) {
  90.   if (isset($field) && ($field === false || $field === 0 || $field === 0.0 || $field === '0' || !empty($field))) {
  91.    return true;
  92.   } else {
  93.    return false;
  94.   }
  95. }
  96. /**
  97.   * 简写
  98.   * @param $field
  99.   * @return bool
  100.   */
  101. public static function check_r($field) {
  102.   if (isset($field) && ($field === false || $field === 0 || $field === 0.0 || $field === '0' || !empty($field))) {
  103.    return true;
  104.   } else {
  105.    return false;
  106.   }
  107. }
  108. public static function check_tel($field) {
  109.   if(preg_match("/^1[345678]{1}\d{9}$/",$field)){
  110.    return true;
  111.   }else{
  112.    return false;
  113.   }
  114. }
  115. public static function check_email($field) {
  116.   if(preg_match("/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/",$field)){
  117.    return true;
  118.   }else{
  119.    return false;
  120.   }
  121. }
  122. public static function check_max_len($field,$param = null) {
  123.   if (function_exists('mb_strlen')) {
  124.    if (mb_strlen($field) <= (int) $param) {
  125.     return true;
  126.    } else {
  127.     return false;
  128.    }
  129.   } else {
  130.    if (strlen($field) <= (int) $param) {
  131.     return true;
  132.    } else {
  133.     return false;
  134.    }
  135.   }
  136. }
  137. public static function check_min_len($field,$param = null) {
  138.   if (function_exists('mb_strlen')) {
  139.    if (mb_strlen($field) >= (int) $param) {
  140.     return true;
  141.    } else {
  142.     return false;
  143.    }
  144.   } else {
  145.    if (strlen($field) >= (int) $param) {
  146.     return true;
  147.    } else {
  148.     return false;
  149.    }
  150.   }
  151. }
  152. public static function check_regex($field, $param = null)
  153. {
  154.   $regex = $param;
  155.   if (preg_match($regex, $field)) {
  156.    return true;
  157.   } else {
  158.    return false;
  159.   }
  160. }
  161. }
复制代码
使用如下
  1. vendor('Func.Valid');
  2. $validators = [
  3. 'tel' => 'required|tel',
  4. 'name' => 'required',
  5. 'email' => 'r|email',
  6. 'password' => 'r|min_len,6|max_len,12'
  7. ];
  8. if ($err = Valid::is_valid($validators,$_POST)) {
  9. $this->json->setErr(10001,$err);
  10. $this->json->Send();
  11. }
复制代码
继续优化!支持错误提示中,添加参数。
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: jiqing
  5. * Date: 18-7-24
  6. * Time: 下午4:36
  7. * 常用验证
  8. */
  9. class Valid
  10. {
  11. static protected $error;
  12. /**
  13.   * @param $validators array array('email' => 'required|valid_email')
  14.   * @param $input array post数据
  15.   * @return string
  16.   */
  17. public function is_valid($validators, $input) {
  18.   foreach ($validators as $field => $rules) {
  19.    if (!isset($input[$field]) || empty($input[$field])) {
  20.     self::$error[] = "缺少参数";
  21.    }
  22.    $rules = explode('|', $rules);
  23.    foreach ($rules as $rule) {
  24.     $method = null;
  25.     $param = null;
  26.     // Check if we have rule parameters
  27.     if (strstr($rule, ',') !== false) {
  28.      $rule = explode(',', $rule);
  29.      $method = 'check_'.$rule[0];
  30.      $param = $rule[1];
  31.      $rule = $rule[0];
  32.     } else {
  33.      $method = 'check_'.$rule;
  34.     }
  35.     $method_array = get_class_methods(new Valid());
  36.     if (!in_array($method,$method_array)) {
  37.      self::$error[] = "Method not exist.";
  38.     }
  39.     if (!self::$method($input[$field],$param)) {
  40.      self::$error[] = self::get_error_tips($rule,$param);
  41.     }
  42.    }
  43.   }
  44.   if (count(self::$error) == 0) {
  45.    return 0;
  46.   }
  47.   return self::$error[0]; // 返回第一个错误
  48. }
  49. /**
  50.   * @param $field string 验证字段
  51.   * @param $rules string 验证规则 required|max_len,100|min_len,6
  52.   * @return string
  53.   */
  54. public function validate($field, $rules)
  55. {
  56.   $rules = explode('|', $rules);
  57.   foreach ($rules as $rule) {
  58.    $method = null;
  59.    $param = null;
  60.    // Check if we have rule parameters
  61.    if (strstr($rule, ',') !== false) {
  62.     $rule = explode(',', $rule);
  63.     $method = 'check_'.$rule[0];
  64.     $param = $rule[1];
  65.     $rule = $rule[0];
  66.    } else {
  67.     $method = 'check_'.$rule;
  68.    }
  69.    $method_array = get_class_methods(new Valid());
  70.    if (!in_array($method,$method_array)) {
  71.     self::$error[] = "Method not exist.";
  72.    }
  73.    if (!self::$method($field,$param)) {
  74.     self::$error[] = self::get_error_tips($rule,$param);
  75.    }
  76.   }
  77.   if (count(self::$error) == 0) {
  78.    return 0;
  79.   }
  80.   return self::$error[0]; // 返回第一个错误
  81. }
  82. /**
  83.   * 灵活获取参数
  84.   * @param $rule
  85.   * @param $param
  86.   */
  87. public static function get_error_tips($rule,$param) {
  88.   $error_tips = [
  89.    'tel' => '手机号格式有误',
  90.    'email' => '邮箱格式有误',
  91.    'max_len' => '参数长度不能超过最大长度'.$param,
  92.    'min_len' => '参数长度不能小于最小长度'.$param,
  93.    'required' => '缺少参数',
  94.    'r' => '缺少参数'
  95.   ];
  96.   return $error_tips[$rule] ? $error_tips[$rule] : '参数格式有误';
  97. }
  98. public static function check_required($field) {
  99.   if (isset($field) && ($field === false || $field === 0 || $field === 0.0 || $field === '0' || !empty($field))) {
  100.    return true;
  101.   } else {
  102.    return false;
  103.   }
  104. }
  105. /**
  106.   * 简写
  107.   * @param $field
  108.   * @return bool
  109.   */
  110. public static function check_r($field) {
  111.   if (isset($field) && ($field === false || $field === 0 || $field === 0.0 || $field === '0' || !empty($field))) {
  112.    return true;
  113.   } else {
  114.    return false;
  115.   }
  116. }
  117. public static function check_tel($field) {
  118.   if(preg_match("/^1[345678]{1}\d{9}$/",$field)){
  119.    return true;
  120.   }else{
  121.    return false;
  122.   }
  123. }
  124. public static function check_email($field) {
  125.   if(preg_match("/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/",$field)){
  126.    return true;
  127.   }else{
  128.    return false;
  129.   }
  130. }
  131. public static function check_max_len($field,$param = null) {
  132.   if (function_exists('mb_strlen')) {
  133.    if (mb_strlen($field) <= (int) $param) {
  134.     return true;
  135.    } else {
  136.     return false;
  137.    }
  138.   } else {
  139.    if (strlen($field) <= (int) $param) {
  140.     return true;
  141.    } else {
  142.     return false;
  143.    }
  144.   }
  145. }
  146. public static function check_min_len($field,$param = null) {
  147.   if (function_exists('mb_strlen')) {
  148.    if (mb_strlen($field) >= (int) $param) {
  149.     return true;
  150.    } else {
  151.     return false;
  152.    }
  153.   } else {
  154.    if (strlen($field) >= (int) $param) {
  155.     return true;
  156.    } else {
  157.     return false;
  158.    }
  159.   }
  160. }
  161. public static function check_regex($field, $param = null)
  162. {
  163.   $regex = $param;
  164.   if (preg_match($regex, $field)) {
  165.    return true;
  166.   } else {
  167.    return false;
  168.   }
  169. }
  170. }
复制代码
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
http://tools.jb51.net/regex/javascript
正则表达式在线天生工具:
http://tools.jb51.net/regex/create_reg
更多关于PHP干系内容感爱好的读者可检察本站专题:《php正则表达式用法总结》、《PHP数组(Array)利用本事大全》、《PHP根本语法入门教程》、《php字符串(string)用法总结》、《php+mysql数据库利用入门教程》及《php常见数据库利用本事汇总》
渴望本文所述对大家PHP步伐设计有所帮助。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作