PHP封装验证类
<?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封装验证类的更多相关文章
- 封装application类
<?php //判断用户是否是通过入口文件访问 if(!defined('ACCESS')){ echo '非法请求'; die; } //封装初始化类 cla ...
- C# System.Attribute(验证类)
本文以一个项目中通用的验证类来举例说明如何使用自定义Attribute来扩展元数据. 在项目中,我们为了保证各个层次之间的松藕合,通常把在各个层次之间传递数据的封装在一个称为实体类的类中,比如Act ...
- 适用于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通用)>,现在重新整理一 ...
- SpringMVC 自动封装枚举类的方法
springmvc默认无法自动封装枚举类,解决方法如下: 1.枚举类 public enum GoodsPromoteEnum { /** * 0 精品 */ fine("精品", ...
- JavaScript 数据验证类
JavaScript 数据验证类 /* JavaScript:验证类 author:杨波 date:20160323 1.用户名验证 2.密码验证 3.重复密码验证 4.邮箱验证 5.手机号验证 6. ...
- C# 通用验证类 支持 WPF,MVC,Winform
验证方式, 通过继承 IDataErrorInfo接口 和 DataAnnotations 解释标记语言而实现, 为了能在WPF上通用,所了也要继承属性更改通知接口INotifyPropertyC ...
- C# - DataValid数据验证类
从EasyCode 摘取下来的数据验证类 using System; using System.Collections.Generic; using System.Text; namespace Le ...
- iOS NSURLSession 封装下载类
周六日鼓捣NSURLSession,效率虽然低下,最后还是有了一点点眉目.昨天和汤老师一起测试,又对它加深了一点理解.趁热打铁,先总结一下. 封装的类,对外用的方法,我写的是类方法,所以,在类方法中, ...
- 封装mysql类
类: <?phpheader("content-type:text/html;charset=utf-8");//封装一个类/*掌握满足单例模式的必要条件(1)私有的构造方法 ...
随机推荐
- php和java优势对比
PHP很专一,用于创建动态网页的服务器端的脚本语言.作为一种为Web而特别设计的语言,PHP带来了许多商业机构渴望的特性. ·学习周期短,比较简单 ·快速的开发时间 ·非常高的性能 这 ...
- angular2-scroll-module
这篇介绍一下,写一个自己的angular2滚动监听插件 目录结构: /scrollModule: ztw-scroll.module.ts; scrollBind.directive.ts; scro ...
- 需要记忆的几个sql语句
链接查询: 1.查询两个表,在where中定义连接条件: select student.sno,sname,ssex,sage,sdept,cno,grade. from student,sc whe ...
- cloudsim仿真过程中内存占用过大问题的解决
在写<云环境下基于预算和截止期约束的科学工作流弹性资源提供和调度>这篇文章时用到了cloudsim仿真软件进行实验仿真,在实验过程中遇到了当仿真执行时间过长时程序总是不能正常结束,由于仿真 ...
- 配置Nginx作为反向代理服务器
最近在实习公司的开发一个项目,项目是前后端彻底分离的项目,前端项目和后端项目各监听着特定的端口号,显然不是80的通用端口,为了不在地址栏上输入IP+端口号的形式,我们可以使用Nginx作为反向代理服务 ...
- CSS如何设置字体的类型、大小、颜色
设计网页时,一般设置body的字体,让其他标签继承body的字体,这样设置特别方便,但是标题标签h1到h6和表单标签(input类型)是没有继承body的字体属性的,它们的字体需要单独设置. < ...
- C/C++开发android应用
(转自:http://blog.csdn.net/srplab1/article/details/7617963) 在某些情况下,比如原来与很多c/c++的代码, 可能希望采用c/c++编写andro ...
- LeetCode OJ:Valid Parentheses(有效括号)
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
- 如何限制mongodb数据库内存占用量方法
多实例下: 可以通过绑定cpu,来防止多实例相互干扰. mongodb的内存也可以限制主,防止全部内存都被一个实例占据. ulimit -s 4096 && ulimit -m 314 ...
- 从无到有开发自己的Wordpress博客主题---运行环境准备
目前只做本地开发,只在本地搭建测试环境,最后会在服务器的CentOS中搭建正式环境,我使用的是Mac,最简单的办法就是安装MAMP. 1.下载并安装MAMP 下载地址:https://www.mamp ...