<?php

$rules = [
"ip" => function ($var) {return ip2long($var);},
"email" => function ($var) {return filter_var($var, FILTER_VALIDATE_EMAIL);},
"username" => function ($var) {return preg_match("/^[a-zA-Z0-9]*$/", $var);},
"password" => function ($var) {return (strlen($var) <= 30) ? true : false;},
"mobile" => function ($var) {return preg_match("/^\d{3}\d?-?\d{10}$/", $var);},
"cid" => function ($var) {return preg_match("/^[1-9][0-9]{16}[0-9xX]$/", $var);},
"number" => function ($var) {return is_numeric($var);},
"int" => function ($var) {return is_numeric($var) ? (preg_match("/[.ex]/", strval($var)) ? false : true):fasle;},
"string" => function ($var) {return is_string($var);},
"time" => function ($var) {return strtotime($var);},
"url" => function ($var) {return preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $var);},
"strrange" => function ($var) {global $_rngstart, $_rngend;return (strlen($var) >= $_rngstart && strlen($var) <= $_rngend) ? true : false;},
"numrange" => function ($var) {global $_rngstart, $_rngend;return ($var >= $_rngstart && $var <= $_rngend) ? true : false;},
"required" => function ($var) {return is_null($var) ? false : true;},
];
$gValidateErrs = [];
$_rngstart = 0;
$_rngend = 0;
function fnvalidate($filter, $input) {
global $rules, $gValidateErrs, $_rngstart, $_rngend;
foreach ($filter as $k => $v) {
if (is_string($v)) {
if (preg_match_all("/strrange\((\d*)\s?,\s?(\d*)\)/", $v, $matches)) {
$_rngstart = $matches[1][0];
$_rngend = $matches[2][0];
} elseif (preg_match_all("/numrange\((\d*)\s?,\s?(\d*)\)/", $v, $matches)) {
$_rngstart = $matches[1][0];
$_rngend = $matches[2][0];
}
$v = preg_replace("/\(.*?\)/", "", $v);
$rls = explode(" ", $v);
if (in_array("required", $rls)) {
if (isset($input[$k])) {
foreach ($rls as $r) {
if (!$rules[$r]($input[$k])) {
array_push($gValidateErrs, [$k, $r]);
}
}
} else {
array_push($gValidateErrs, [$k, "required"]);
}
} else {
if (isset($input[$k])) {
foreach ($rls as $r) {
if (!$rules[$r]($input[$k])) {
unset($input[$k]);
}
}
}
}
} else {
if (is_array($v)) {
fnvalidate($v, $input[$k]);
} else {
if (is_callable($v)) {
$v($input[$k]);
}
}
}
}
}
//test;
$filter = [
"p" => "numrange(1,7) int required",
"q" => [
"q1" => "numrange(5,8) int required",
],
];
$input = [
"p" => 0,
"q" => ["q1" => 6],
];

//test
fnvalidate($filter, $input);

?>

validate的更多相关文章

  1. Leetcode 笔记 98 - Validate Binary Search Tree

    题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...

  2. jQuery Validate 表单验证 — 用户注册简单应用

    相信很多coder在表单验证这块都是自己写验证规则的,今天我们用jQuery Validate这款前端验证利器来写一个简单的应用. 可以先把我写的这个小demo运行试下,先睹为快.猛戳链接--> ...

  3. jquery validate表单验证插件-推荐

    1 表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家.     1.点击表单项,显示帮助提示 2.鼠标离开表单项时,开始校验元素  3.鼠标离开后的正确.错误提示及鼠标移入时的帮 ...

  4. jq.validate隐藏元素忽略验证

    jq.validate隐藏元素忽略验证 现在有这样一个需求,当触发某类事件时候,需要在页面中显示input框,但是当不需要加载页面中的元素时候,进行隐藏.在这个需求的前提下,程序中对于input中的输 ...

  5. jq.validate 自定义验证两个日期

    jq.validate 自定义验证两个日期 首先定义有一个表单,date1和date2是属于表单的元素,若date1大于date2,返回false:若date1<date2,返回true.使用j ...

  6. 修改 jquery.validate.js 支持非form标签

    尝试使用markdown来写一篇blog,啦啦啦 源代码传送门:github 在特殊情况下我们使用jquery.validate.js对用户输入的内容做验证的时候,表单并不是一定包含在form之中,有 ...

  7. 表单验证插件之jquery.validate.js

    提到表单验证的插件,第一个想到的就是jquery.validate.js,所以小生想在这里稍微详细地说一下这款插件的具体使用方法,便于理解,我直接附上整段demo的代码(没怎么调样式,主要是看js): ...

  8. validate表单验证插件

    1.引入validate.js包 <script src="xx/xx/jquery.validate.min.js"></script> 2.表单验证 / ...

  9. 基于jQuery的Validate表单验证

    表单验证可以说在前端开发工作中是无处不在的~ 有数据,有登录,有表单, 都需要前端验证~~  而我工作中用到最多的就是基于基于jQuery的Validate表单验证~  就向下面这样~ 因为今天有个朋 ...

  10. Jquery客户端校验——jquery.validate.js

    jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证 ...

随机推荐

  1. 学习mongo系列(三) update() save()

    一.update()方法 >db.user.update({"name":"user1"},{$set:{"title":" ...

  2. SUBLIME TEXT 2 设置文件详解

    SUBLIME TEXT 2 设置文件详解 Preferences.sublime-settings文件: // While you can edit this file, it’s best to ...

  3. SQL语句中SUM与COUNT的区别

    SUM是对符合条件的记录的数值列求和 COUNT 是对查询中符合条件的结果(或记录)的个数 例如: 表fruit id     name    price 1     apple     3.00 2 ...

  4. C# 字符串转义和反转义

    System.Text.RegularExpressions.Regex.Unescape(s) System.Text.RegularExpressions.Regex.Escape(s)

  5. 常见JAVA框架

     Spring Framework [Java开源JEE框架] Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不 ...

  6. OC语言@property @synthesize和id

    OC语言@property @synthesize和id 一.@property @synthesize关键字 注意:这两个关键字是编译器特性,让xcode可以自动生成getter和setter的声明 ...

  7. Python、PIP环境变量的配置

    Python安装的路径:D:\Python35 pip的环境变量 Python和pip的PATH: PIP下载链接:https://pypi.python.org/pypi/pip 随意解压好,然后C ...

  8. XML学习摘要

    XML元素可以在开始标签中包含属性. 属性(Attribute)提供关于元素的额外信息,属性必须加引号. 属性值必须被引号包围,不过单引号和双引号均可,若属性值本身包含双引号,那么有必要使用单引号包围 ...

  9. ExtJs中gridpanel分组后组名排序

    /** * 定义降序的groupingStore */ var DescGroupingStore = Ext.extend(Ext.data.GroupingStore, { groupDir : ...

  10. AT&T asm之Qt使用

    #include <stdio.h> #include <string.h> /* 函数名: att_asm_p(); 功能:类似于Intel汇编功能:mov ebx, [OS ...