• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    php实现的表单验证类完整示例

    本文实例讲述了php实现的表单验证类。分享给大家供大家参考,具体如下:

    ?php
    /**
     * 用法
     * use Validate\Validator;
     * 
     * $rules = [ 
     *    ['name|名字', 'require|email|in:7,8,9|max:10|min:6|between:6,8|length:2', '名字不能为空|名字必须必须为正确的邮件地址'],
     *    ['test|测试', 'require'],
     *  ];
     * $data = ['name' => '8gAg:'];
     * $validator = new Validator($rules);
     * $validator->addRule(['name|名字', 'regex', '/^[0-8|a-z]+$/', '正则验证失败哦']); //可以为二维数组,有|的正则验证只能通过addRule。
     * $validator->validate($data);
     * $validator->getAllErrors(); //获取所有验证错误 array
     * $validator->getError(); //获取第一条验证错误 string
     * Validator::in('7,8,9', 8); //静态调用
     * Validator::isEmail('375373223@qq.com');
     */
    namespace Validate;
    class Validator {
      //错误信息
      private $error = [];
      //传入的验证规则
      private $validate = [];
      //需要验证的参数
      private $data = [];
      //添加的规则
      private $add_rules = [];
      //默认错误提示
      private $error_msg = [
        'require' => ':attribute不能为空',
        'number' => ':attribute必须为数字',
        'array'  => ':attribute必须为数组',
        'float'  => ':attribute必须为浮点数',
        'boolean' => ':attribute必须为布尔值',
        'email'  => ':attribute必须为正确的邮件地址',
        'url'   => ':attribute必须为正确的url格式',
        'ip'   => ':attribute必须为正确的ip地址',
        'timestamp' => ':attribute必须为正确的时间戳格式',
        'date'  => ':attribute必须为正确的日期格式',
        'regex'  => ':attribute格式不正确',
        'in'   => ':attribute必须在:range内',
        'notIn'  => ':attribute必须不在:range内',
        'between' => ':attribute必须在:1-:2范围内',
        'notBetween' => ':attribute必须不在:1-:2范围内',
        'max'   => ':attribute最大值为:1',
        'min'   => ':attribute最小值为:1',
        'length' => ':attribute长度必须为:1',
        'confirm' => ':attribute和:1不一致',
        'gt'   => ':attribute必须大于:1',
        'lt'   => ':attribute必须小于:1',
        'egt'   => ':attribute必须大于等于:1',
        'elt'   => ':attribute必须小于等于:1',
        'eq'   => ':attribute必须等于:1',
      ];
      public function __construct($validate = null) {
        $this->validate = $validate;
     }
      /**
       * [validate 验证]
       * @param [type] $data [需要验证的参数]
       * @return [type]    [boolean]
       */
     public function validate($data) {
     $this->data = $data;
        foreach ($this->validate as $key => $item) {
         $item_len = count($item);
         $name = $item[0];
         $rules = $item[1];
         $rules = explode('|', $rules);
         $message = $item_len > 2 ? explode('|', $item[2]) : null;
          $this->check($name, $rules, $message); 
        }
        if(!empty($this->add_rules)) {
         $this->checkAddRules();
        }
        return empty($this->error) ? TRUE : FALSE;
     }
      /**
       * [check 单个字段验证]
       * @param [type] $name  [description]
       * @param [type] $rules  [description]
       * @param [type] $message [description]
       * @return [type]     [null]
       */
     private function check($name, $rules, $message) {
     //$title = $name;
     $rule_name = $title = $name;
     if(strpos($name, '|')) {
      $rule_name = explode('|', $name)[0];
      $title = explode('|', $name)[1];
     }
        foreach ($rules as $i => $rule) {
       $validate_data = isset($this->data[$rule_name]) ? $this->data[$rule_name] : null;
         
         $result = $this->checkResult($rule, $validate_data);
         if(!$result) {
         $error_info = isset($message[$i]) ? $message[$i] : $this->getMessage($title, $rule);
            if($error_info) {
             array_push($this->error, $error_info);
            }
         }
        }
     }
      /**
       * [getMessage 获取验证失败的信息]
       * @param [type] $name [字段名]
       * @param [type] $rule [验证规则]
       * @return [type]    [string OR fail false]
       */
     private function getMessage($name, $rule) {
     $value1 = '';
     $value2 = '';
     $range = '';
     $error_key = $rule;
        if(strpos($rule, ':')) {
         $exp_arr = explode(':', $rule);
         $error_key = $exp_arr[0];
         $range = $exp_arr[1];
         $message_value = explode(',', $exp_arr[1]);
         $value1 = isset($message_value[0]) ? $message_value[0] : '';
         $value2 = isset($message_value[1]) ? $message_value[1] : '';
        }
        if(isset($this->error_msg[$error_key])) {
         return str_replace([':attribute', ':range', ':1', ':2'], [$name, $range, $value1, $value2], $this->error_msg[$error_key]);
        }
     return false;
     }
      /**
       * [checkResult 字段验证]
       * @param [type] $rule     [验证规则]
       * @param [type] $validate_data [需要验证的数据]
       * @return [type]        [boolean]
       */
     private function checkResult($rule, $validate_data) {
        switch ($rule) {
         case 'require':
           return $validate_data != '';
         break;
         case 'number':
           return filter_var($validate_data, FILTER_SANITIZE_NUMBER_INT);
         break;
         case 'array':
           return is_array($validate_data);
         break;
         case 'float':
           return filter_var($validate_data, FILTER_VALIDATE_FLOAT);
         break;
         case 'boolean':
           return filter_var($validate_data, FILTER_VALIDATE_BOOLEAN);
         break;
         case 'email':
           return filter_var($validate_data, FILTER_VALIDATE_EMAIL);
         break;
         case 'url':
           return filter_var($validate_data, FILTER_SANITIZE_URL);
         case 'ip':
           return filter_var($validate_data, FILTER_VALIDATE_IP);
         break;
         case 'timestamp':
           return strtotime(date('Y-m-d H:i:s',$validate_data)) == $validate_data;
         break;
         case 'date': //2017-11-17 12:12:12
           return strtotime($validate_data);
         break;
         default:
             if(strpos($rule, ':')) {
             $rule_arr = explode(':', $rule);
             $func_name = substr($rule, strpos($rule, ':')+1);
             return call_user_func_array([$this, $rule_arr[0]], [$func_name, $validate_data]); 
           }else{
            return call_user_func_array([$this, $rule], [$rule, $validate_data]); 
           }
         break;
        }
     }
      /**
       * [regex 正则验证]
       * @param [type] $rule [description]
       * @param [type] $data [description]
       * @return [type]    [description]
       */
     public static function regex($rule, $data) {
        return filter_var($data, FILTER_VALIDATE_REGEXP, ["options" => ["regexp" => $rule]]);
     }
      /**
       * [addRule 添加规则格式 []]
       * @param [type] $rule [description]
       */
     public function addRule($rule) {
     if(is_array(current($rule))) {
      $this->add_rules = array_merge($this->add_rules, $rule);
     }else{
      array_push($this->add_rules, $rule);
     }
     }
      /**
       * [checkAddRules 添加新的规则的验证]
       * @return [type] [description]
       */
     public function checkAddRules() {
     foreach ($this->add_rules as $key => $item) {
      $name = $item[0];
         $message = isset($item[3]) ? $item[3] : null;
         $rule_name = $title = $name;
      if(strpos($name, '|')) {
      $rule_name = explode('|', $name)[0];
      $title = explode('|', $name)[1];
      }
      $validate_data = isset($this->data[$rule_name]) ? $this->data[$rule_name] : null;
         
          $result = $this->checkResult($item[1].':'.$item[2], $validate_data);
         if(!$result) {
         $error_info = isset($message) ? $message : $this->getMessage($title, $item[1]);
           if($error_info) {
             array_push($this->error, $error_info);
           }
         } 
     }
     }
     /**
     * [in description]
     * @param [type] $rule [验证规则]
     * @param [type] $data [需要验证的数据]
     * @return [type]    [boolean]
     */
     public static function in($rule, $data) {
     if(!is_array($rule)) {
      $rule = explode(',', $rule);
     }
        return in_array($data, $rule);
     }
      /**
     * [in description]
     * @param [type] $rule [验证规则]
     * @param [type] $data [需要验证的数据]
     * @return [type]    [boolean]
     */
     public static function notIn($rule, $data) {
        return !$this->in($data, $rule);
     }
      /**
     * [in description]
     * @param [type] $rule [验证规则]
     * @param [type] $data [需要验证的数据]
     * @return [type]    [boolean]
     */
     public static function between($rule, $data) {
     $rule = explode(',', $rule);
        return $data >= $rule[0]  $data = $rule[1];
     }
      /**
     * [in description]
     * @param [type] $rule [验证规则]
     * @param [type] $data [需要验证的数据]
     * @return [type]    [boolean]
     */
     public static function notBetween($rule, $data) {
     return !$this->between($rule, $data);
     }
      /**
     * [in description]
     * @param [type] $rule [验证规则]
     * @param [type] $data [需要验证的数据]
     * @return [type]    [boolean]
     */
     public static function max($rule, $data) {
     return $data = $rule;
     }
      /**
     * [in description]
     * @param [type] $rule [验证规则]
     * @param [type] $data [需要验证的数据]
     * @return [type]    [boolean]
     */
     public static function min($rule, $data) {
     return $data >= $rule;
     }
      /**
     * [in description]
     * @param [type] $rule [验证规则]
     * @param [type] $data [需要验证的数据]
     * @return [type]    [boolean]
     */
     public static function length($rule, $data) {
     $length = is_array($data) ? count($data) : strlen($data);
     return $length == $rule;
     }
      /**
     * [in description]
     * @param [type] $rule [验证规则]
     * @param [type] $data [需要验证的数据]
     * @return [type]    [boolean]
     */
     public static function confirm($rule, $data) {
     return isset($this->data[$rule])  $data == $this->data[$rule];
     }
     public static function gt($rule, $data) {
     return $data > $rule;
     }
      public static function lt($rule, $data) {
     return $data  $rule;
     }
     public static function egt($rule, $data) {
     return $data >= $rule;
     }
      public static function elt($rule, $data) {
     return $data = $rule;
     }
     public static function eq($rule, $data) {
     return $data == $rule;
     }
      /**
     * [in 获取验证失败的第一条信息]
     * @return [type] [string]
     */
     public function getError() {
        return count($this->error) > 0 ? $this->error[0] : null;
     }
      /**
       * [getAllErrors 获取所有验证失败的信息]
       * @return [type] [array]
       */
     public function getAllErrors() {
        return $this->error;
     }
      /**
       * [__call 调用自定义函数或者]
       * @param [type] $func [验证规则,函数名]
       * @param [type] $data [验证数据]
       * @return [type]    [boollean]
       */
     function __call($func, $data) {
     $func_arr = get_defined_functions();
     if(in_array($func,$func_arr['user'])) {
      return call_user_func($func, $data);
     }else{
      array_push($this->error, '没有' . $func . '这个方法');
     }
      }
      /**
       * [__callStatic 静态方法调用自定义函数或者]
       * @param [type] $func [验证规则,函数名]
       * @param [type] $data [验证数据]
       * @return [type]    [boollean]
       */
      public static function __callStatic($func, $data) {
      if(substr($func, 0, 2) == 'is') {
      return call_user_func_array([new self, 'checkResult'], [strtolower(substr($func, 2)), $data[0]]);
     } 
      }
    }
    
    

    PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:

    JavaScript正则表达式在线测试工具:
    http://tools.jb51.net/regex/javascript

    正则表达式在线生成工具:
    http://tools.jb51.net/regex/create_reg

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php程序设计安全教程》、《php安全过滤技巧总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • php封装的表单验证类完整实例
    • php常用表单验证类用法实例
    • php 表单验证实现代码
    • php用户注册页面利用js进行表单验证具体实例
    • 基于PHP+Ajax实现表单验证的详解
    • php下常用表单验证的正则表达式
    • PHP表单验证内容是否为空的实现代码
    • PHP Yii框架之表单验证规则大全
    • PHP开发中常用的三个表单验证函数使用小结
    • ThinkPHP框架表单验证操作方法
    • PHP实现的用户注册表单验证功能简单示例
    上一篇:thinkphp3.2同时连接两个数据库的简单方法
    下一篇:thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    php实现的表单验证类完整示例 php,实现,的,表单,验证,类,