校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > php實現的表單驗證類完整示例

php實現的表單驗證類完整示例

熱門標簽:江西手機自動外呼防封系統是什么 長春人工外呼系統服務商 怎么向銷售公司推銷外呼系統 廣州防封卡外呼系統多少錢一個月 高德地圖標注家 外呼系統撥打暫時無法接通 廣東地市地圖標注 哪里辦理400電話 仁和怎么申請400開頭的電話

本文實例講述了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實現的用戶注冊表單驗證功能簡單示例

標簽:湘西 梅河口 廈門 黔東 文山 海北 惠州 濮陽

巨人網絡通訊聲明:本文標題《php實現的表單驗證類完整示例》,本文關鍵詞  php,實現,的,表單,驗證,類,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《php實現的表單驗證類完整示例》相關的同類信息!
  • 本頁收集關于php實現的表單驗證類完整示例的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲精品欧美二区三区中文字幕| 免费看黄色91| 91首页免费视频| 中文字幕一区免费在线观看| 岛国av在线一区| 国产亚洲欧美日韩日本| 国产成人免费视频网站 | 久久人人97超碰com| 久久精品二区亚洲w码| 日韩精品最新网址| 国产一区二区伦理| 国产蜜臀av在线一区二区三区| 高清视频一区二区| 亚洲色图视频免费播放| 日本久久电影网| 亚洲成人黄色影院| 538在线一区二区精品国产| 日韩电影在线观看电影| 精品久久久久久久久久久久久久久 | 国产综合久久久久久鬼色| 日韩精品一区在线观看| 精品一区二区三区蜜桃| 国产午夜亚洲精品午夜鲁丝片| 粉嫩一区二区三区在线看| 亚洲欧美综合网| 在线观看av不卡| 奇米色一区二区| 久久久久久久久久电影| a在线欧美一区| 一区二区免费看| 51久久夜色精品国产麻豆| 精品一区二区三区在线播放视频 | 在线成人小视频| 九九视频精品免费| 国产精品久久久久aaaa| 欧美在线观看一区二区| 美女网站在线免费欧美精品| 国产婷婷精品av在线| 色94色欧美sute亚洲13| 免费精品99久久国产综合精品| 久久久91精品国产一区二区三区| 成人黄色小视频| 亚洲www啪成人一区二区麻豆| 欧美大片一区二区| jlzzjlzz欧美大全| 日韩中文字幕亚洲一区二区va在线| 欧美精品一区二区蜜臀亚洲| av一二三不卡影片| 日韩av电影天堂| 国产精品女同互慰在线看| 欧美色网站导航| 精品一区二区三区在线视频| 成人免费在线观看入口| 欧美福利电影网| 懂色av一区二区三区蜜臀| 亚洲一区二区av在线| 26uuu久久综合| 91成人网在线| 国产精品99久久久久| 亚洲国产成人高清精品| 国产视频一区二区三区在线观看 | 一本在线高清不卡dvd| 免费人成网站在线观看欧美高清| 国产精品欧美综合在线| 91精品国产综合久久福利| 成人黄色国产精品网站大全在线免费观看| 亚洲成人免费电影| 国产精品无遮挡| 5月丁香婷婷综合| 91丨porny丨户外露出| 久久99精品国产.久久久久久| 亚洲精品国产一区二区三区四区在线| 精品理论电影在线观看| 国产日韩欧美激情| 欧美日韩国产另类一区| 懂色av中文字幕一区二区三区| 五月天久久比比资源色| 中文字幕中文字幕一区二区| 精品乱码亚洲一区二区不卡| 欧美在线观看一区二区| 豆国产96在线|亚洲| 免费人成在线不卡| 亚洲自拍偷拍网站| 国产精品视频一二三| 欧美xfplay| 欧美精品乱人伦久久久久久| 99久久夜色精品国产网站| 韩国精品免费视频| 日本不卡1234视频| 亚洲一级不卡视频| 1024成人网色www| 国产肉丝袜一区二区| 欧美草草影院在线视频| 欧美亚州韩日在线看免费版国语版| 国产69精品久久99不卡| 九九在线精品视频| 欧美a一区二区| 午夜久久福利影院| 亚洲午夜在线电影| 亚洲精品中文在线观看| 国产精品久久毛片a| 国产亚洲精久久久久久| 精品美女在线播放| 日韩手机在线导航| 欧美一三区三区四区免费在线看 | 2024国产精品| 制服丝袜激情欧洲亚洲| 欧美亚洲禁片免费| 色综合久久久久网| 97国产精品videossex| 岛国精品在线播放| 国产风韵犹存在线视精品| 激情文学综合插| 美女在线视频一区| 奇米在线7777在线精品| 日本成人在线视频网站| 天天色图综合网| 日韩高清电影一区| 日韩中文字幕一区二区三区| 亚洲a一区二区| 日韩精品一区第一页| 婷婷亚洲久悠悠色悠在线播放| 午夜精品视频一区| 爽好久久久欧美精品| 日韩二区三区四区| 美美哒免费高清在线观看视频一区二区 | wwwwxxxxx欧美| 2021国产精品久久精品| 久久久久久久久久久久久久久99| 久久网站最新地址| 国产日韩欧美不卡| 国产精品人人做人人爽人人添 | 亚洲视频图片小说| 亚洲精品欧美激情| 亚洲一二三区不卡| 日韩中文字幕1| 蜜臀久久99精品久久久画质超高清 | 自拍偷拍欧美精品| 一区二区三区在线观看欧美| 一区二区在线观看不卡| 亚洲第一电影网| 奇米精品一区二区三区在线观看 | 91女厕偷拍女厕偷拍高清| 91热门视频在线观看| 日本道色综合久久| 精品视频免费在线| 欧美一区二区在线视频| 精品国产免费视频| 中文一区二区完整视频在线观看 | 国产精品私房写真福利视频| 成人欧美一区二区三区| 亚洲午夜精品在线| 秋霞午夜av一区二区三区| 国产九色sp调教91| 91网站黄www| 欧美日韩一区久久| 精品久久国产97色综合| 欧美激情在线观看视频免费| 亚洲精品国产成人久久av盗摄| 香蕉成人伊视频在线观看| 久久精品国产99久久6| 国产jizzjizz一区二区| 91麻豆123| 欧美精品国产精品| 久久蜜桃一区二区| 亚洲三级在线免费观看| 亚洲成人精品一区二区| 国产一区二区调教| 91久久精品一区二区三| 欧美一级午夜免费电影| 中文字幕va一区二区三区| 亚洲国产一二三| 国产一区二区三区高清播放| 色香蕉成人二区免费| 日韩一本二本av| 中文av一区二区| 亚洲地区一二三色| 国产福利一区在线| 欧美三级中文字幕| 国产网站一区二区| 亚洲www啪成人一区二区麻豆| 国产一区二区三区久久久| 色视频一区二区| 2023国产精华国产精品| 亚洲一区av在线| 粉嫩绯色av一区二区在线观看| 欧美性大战xxxxx久久久| 久久久久久一级片| 亚洲成年人网站在线观看| 丰满少妇在线播放bd日韩电影| 欧美天堂一区二区三区| 久久久91精品国产一区二区精品| 亚洲伊人伊色伊影伊综合网| 国产精品一区久久久久| 欧美日韩高清一区二区不卡| 中文字幕第一区综合| 免费精品视频最新在线| 91丝袜国产在线播放| 精品国产乱码久久久久久久久| 亚洲在线一区二区三区|