简单编写php验证类,教你如何写好php程序(含多种验证规则)
2013-05-23 16:31
573 查看
很多人在开发网站的时候往往只是通过简单的js验证,当你一不小心在js中多写了个逗号或者点号,ie6无法识别就直接跳过验证了。其实最安全的做法还是需要在服务端对用户输入的数据做验证的。本人写了个简单的php验证类,含多种验证规则,供大家学习参考。原文链接
调用方法
当然,如果你觉得验证无法满足你的需求,您还可以创建子类扩展您的方法
<?php /** * 用户输入规则验证类 * author HaiNing Zhang * date 2013-05-23 */ class Validate{ // 验证规则 private $role_name = array( // 验证是否为空 'required', // 匹配邮箱 'email', // 匹配身份证 'idcode', // 匹配数字 'number', // 匹配http地址 'http', // 匹配qq号 'qq', //匹配中国邮政编码 'postcode', //匹配ip地址 'ip', //匹配电话格式 'telephone', // 匹配手机格式 'mobile', //匹配26个英文字母 'en_word', // 匹配只有中文 'cn_word', // 验证账户(字母开头,由字母数字下划线组成,4-20字节) 'user_account', ); /** * [验证函数] * @param [array] $data [用户要验证的数据] * @param [array] $validate_role [验证规则] * @param [array] $validate_err_msg [错误信息提示] * @return [bool] [成功返回true, 失败返回错误信息] */ public function verify($data, $validate_role, $validate_err_msg=''){ if(empty($data)) return false; if(empty($validate_role)) return false; foreach ($data as $key => $value) { $key = strtolower($key); foreach ($validate_role as $kk => $vv) { $kk = strtolower($kk); if($key == $kk){ foreach ($vv as $k => $v) { $k = strtolower($k); if( !in_array($k, $this->role_name)) return 'role name "'.$k.'" is not found!'; if($v == true){ if ( !$this->$k($value) ){ if (!isset($validate_err_msg[$kk][$k])) return 'var '.$key.' in '.$k.' of regular validation failure!'; return $validate_err_msg[$kk][$k]; } } } } } } return true; } // 获取规则数组 public function get_role_name(){ return $this->role_name; } // 设置属性规则 public function set_role_name($arr){ $this->role_name = array_merge($this->role_name, $arr); } // 验证是否为空 public function required($str){ if(trim($str) != "") return true; return false; } // 验证邮件格式 public function email($str){ if(preg_match("/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/", $str)) return true; else return false; } // 验证身份证 public function idcode($str){ if(preg_match("/^\d{14}(\d{1}|\d{4}|(\d{3}[xX]))$/", $str)) return true; else return false; } // 验证http地址 public function http($str){ if(preg_match("/[a-zA-Z]+:\/\/[^\s]*/", $str)) return true; else return false; } //匹配QQ号(QQ号从10000开始) public function qq($str){ if(preg_match("/^[1-9][0-9]{4,}$/", $str)) return true; else return false; } //匹配中国邮政编码 public function postcode($str){ if(preg_match("/^[1-9]\d{5}$/", $str)) return true; else return false; } //匹配ip地址 public function ip($str){ if(preg_match("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/", $str)) return true; else return false; } // 匹配电话格式 public function telephone($str){ if(preg_match("/^\d{3}-\d{8}$|^\d{4}-\d{7}$/", $str)) return true; else return false; } // 匹配手机格式 public function mobile($str){ if(preg_match("/^(13[0-9]|15[0-9]|18[0-9])\d{8}$/", $str)) return true; else return false; } // 匹配26个英文字母 public function en_word($str){ if(preg_match("/^[A-Za-z]+$/", $str)) return true; else return false; } // 匹配只有中文 public function cn_word($str){ if(preg_match("/^[\x80-\xff]+$/", $str)) return true; else return false; } // 验证账户(字母开头,由字母数字下划线组成,4-20字节) public function user_account($str){ if(preg_match("/^[a-zA-Z][a-zA-Z0-9_]{3,19}$/", $str)) return true; else return false; } // 验证数字 public function number($str){ if(preg_match("/^[0-9]+$/", $str)) return true; else return false; } }
调用方法
<?php require('model/Validate.php'); $data = array( "username"=>'ningofaura@gmail.com', "qq"=>'593084029', "nickname"=>'张海宁', "id"=>'24', ); $validate_role = array( 'username'=>array( 'required'=>true, 'email'=>true, ), 'qq'=>array( 'required'=>true, 'qq'=>true, ), 'nickname'=>array( 'required'=>true, ), 'id'=>array( 'required'=>true, 'number'=>true, ), ); $validate_err_msg = array( 'username'=>array( 'required'=>"用户名不能为空", 'email'=>"邮箱格式不正确", ), 'qq'=>array( 'required'=>"qq不能为空", 'qq'=>"qq格式不正确", ), 'nickname'=>array( 'required'=>"昵称不能为空", ), 'id'=>array( 'required'=>"id不能为空", 'number'=>"不是数字", ), ); $Validate = new Validate(); $rt = $Validate->verify($data, $validate_role, $validate_err_msg); if ($rt !== true){ echo $rt; exit; }
当然,如果你觉得验证无法满足你的需求,您还可以创建子类扩展您的方法
<?php /** * 用户数据库异步验证 * author HaiNing Zhang * date 2013-05-23 */ class AjaxValidate extends Validate{ private $role_name = array( // 验证用户名是否存在 'is_username', // 验证昵称是否存在 'is_nickname', ); private $db; public function __construct(){ $this->db = &load_system("Database"); $this->set_role_name($this->role_name); } // 判断用户名是否可以注册(防止用户名重复) public function is_username($username){ $_username = $this->db->filter('s', $username); $sql = "select id from user where username =".$_username; if($this->db->num_rows($sql)){ return false; }else{ return true; } } // 判断昵称是否可用(防止昵称重复) public function is_nickname($nickname){ $_nickname = $this->db->filter('s', $nickname); $sql = "select id from user where nickname =".$_nickname; if($this->db->num_rows($sql)){ return false; }else{ return true; } } }
相关文章推荐
- 如何使用Dreamweaver CS6编写PHP程序,如何使用DW创建PHP站点
- 如何编写简单的端口扫描程序:
- 简单的用PHP编写的导航条程序
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- PHP日历程序编写(简单实现)
- PHP程序编写规则
- 如何使用Dreamweaver CS6编写PHP程序,如何使用DW创建PHP站点
- 如何使用Python为Hadoop编写一个简单的MapReduce程序(这个人T字还有好几篇精华的可以看)
- php编写简单的文章发布程序
- PHP 编写简单的投票调查程序
- 如何编写程序,使它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现?
- 如何编写和验证简单的纯组合逻辑模块——《Verilog数字系统设计教程》读书笔记(二)
- 第一个简单的用户注册验证php程序
- java学习2:记录如何简单的将idea编写的程序打包并转为exe格式
- php编写的简单社区灌水程序及Fiddler使用说明
- 简单的用PHP编写的导航条程序
- 如何编写简单的应用window窗口程序
- [C/C++]_[初级]_[如何编写简单有效代码,提高程序运行效率和性能]
- 如何使用Dreamweaver CS6编写PHP程序,如何使用DW创建PHP站点