<?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
/**
* 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封装验证类的更多相关文章

  1. 封装application类

    <?php  //判断用户是否是通过入口文件访问   if(!defined('ACCESS')){     echo '非法请求';     die;   }   //封装初始化类   cla ...

  2. C# System.Attribute(验证类)

    本文以一个项目中通用的验证类来举例说明如何使用自定义Attribute来扩展元数据.  在项目中,我们为了保证各个层次之间的松藕合,通常把在各个层次之间传递数据的封装在一个称为实体类的类中,比如Act ...

  3. 适用于app.config与web.config的ConfigUtil读写工具类 基于MongoDb官方C#驱动封装MongoDbCsharpHelper类(CRUD类) 基于ASP.NET WEB API实现分布式数据访问中间层(提供对数据库的CRUD) C# 实现AOP 的几种常见方式

    适用于app.config与web.config的ConfigUtil读写工具类   之前文章:<两种读写配置文件的方案(app.config与web.config通用)>,现在重新整理一 ...

  4. SpringMVC 自动封装枚举类的方法

    springmvc默认无法自动封装枚举类,解决方法如下: 1.枚举类 public enum GoodsPromoteEnum { /** * 0 精品 */ fine("精品", ...

  5. JavaScript 数据验证类

    JavaScript 数据验证类 /* JavaScript:验证类 author:杨波 date:20160323 1.用户名验证 2.密码验证 3.重复密码验证 4.邮箱验证 5.手机号验证 6. ...

  6. C# 通用验证类 支持 WPF,MVC,Winform

    验证方式,   通过继承 IDataErrorInfo接口 和 DataAnnotations 解释标记语言而实现, 为了能在WPF上通用,所了也要继承属性更改通知接口INotifyPropertyC ...

  7. C# - DataValid数据验证类

    从EasyCode 摘取下来的数据验证类 using System; using System.Collections.Generic; using System.Text; namespace Le ...

  8. iOS NSURLSession 封装下载类

    周六日鼓捣NSURLSession,效率虽然低下,最后还是有了一点点眉目.昨天和汤老师一起测试,又对它加深了一点理解.趁热打铁,先总结一下. 封装的类,对外用的方法,我写的是类方法,所以,在类方法中, ...

  9. 封装mysql类

    类: <?phpheader("content-type:text/html;charset=utf-8");//封装一个类/*掌握满足单例模式的必要条件(1)私有的构造方法 ...

随机推荐

  1. Android 必须知道2018年流行的框架库及开发语言,看这一篇就够了!

    导语 2017 已经悄悄的走了,2018 也已经匆匆的来了,我们在总结过去的同时,也要展望一下未来,来规划一下今年要学哪些新技术.这几年优秀Android的开源库不断推出,新技术层出不穷,需要我们不断 ...

  2. SSH免密登录配置

    SSH免密登录配置 本地生成密钥文件: $ ssh-keygen 输出: Generating public/private rsa key pair. Enter file in which to ...

  3. ultraedit使用记录

    ultraedit使用记录 10:57:33 在日常的工作中,我经常用keil进行程序的编写等工作,不过在编写过程中Keil对中文的支持不是很好,容易发生问题:同事推荐我用ultraedit进行程序的 ...

  4. 关键C函数备录

    一.搜索指定路径下的文件 (1) intptr_t _findfirst(const char *, struct _finddata_t *);//可以使用通配符*或? (2) int _findn ...

  5. Javascript鼠标和滚轮事件

    (转自:http://www.cnblogs.com/MrBackKom/archive/2012/06/25/2562920.html) a)鼠标事件 鼠标事件也许是web页面当中最常用到的事件,因 ...

  6. Qt DLL总结

    (转自:http://qimo601.iteye.com/blog/1397936) QT动态链接库的调用方法,主要包括: 1.显式链接DLL,调用DLL的全局函数,采用Qt的QLibrary方法 2 ...

  7. MMU实验实验

    SRAM比较贵,访问方便,发出地址就可以, SDRAM比较便宜 2440的启动方式: 1 .NOR启动   0地址指向NOR(BANK0) 2 .NANA启动 0地址指向片内的SRAM(steppin ...

  8. Castle IOC概念理解

    最近在用Castle,里面有些概念比较容易混淆,特此解释一下: 1. 容器(Container):Windsor是一个反转控制容器.它创建在一个微内核的基础之上,这个微内核能够扫描类并且试图找到这些类 ...

  9. Python 安装 pip package

    Python的 package 站点提供的msi安装越来越少了,如今大多是.whl或.tar.gz格式.对某些用windows的小白(比如,我)来说,对.tar.gz闻所未闻,也纠结了很长时间.whl ...

  10. C高级第一次作业附加

    之前的作业链接:http://www.cnblogs.com/1204113692yang/p/8625650.html 过去两周学习了指针的概念.指针变量的定义.指针的基本运算.指针操作改变主调函数 ...