作为Easyui的校验插件没有实现多重校验能力是一种缺憾。比如说,既要限制格式为email,同时要求最长长度为20,我们就要扩展一种规则,而对长度的要求很容易变化,如果变成要求30,我们又得扩张一种规则,所以对于多重验证的需求很必要。
实现思路较为简单,扩展一种新规则:multiple,入参为其它规则,然后遍历每个规则,遇到校验不通过的时候就返回失败,并且返回对应的提示消息。思路比较简单,不过正则表达式技巧的使用还是很漂亮的,个人岁暂时不动正则,不过觉得它很优美,所以我很快就会懂的,哈哈。直接上代码了。
实现代码:
$.extend($.fn.validatebox.defaults.rules, {
multiple: {
validator: function (value, vtypes) {
var returnFlag = true;
var opts = $.fn.validatebox.defaults;
for (var i = 0; i < vtypes.length; i++) {
var methodinfo = /([a-zA-Z_]+)(.*)/.exec(vtypes[i]);
var rule = opts.rules[methodinfo[1]];
if (value && rule) {
var parame = eval(methodinfo[2]);
if (!rule["validator"](value, parame)) {
returnFlag = false;
this.message = rule.message;
break;
}
}
}
return returnFlag;
}
}
});
经过以上的扩展,多重校验算是实现了,但是验证不通过时的提示信息却出现了问题,当第二个验证器验证失败的时候,提示信息会将第一个验证器的提示信息参杂进来。究其原因是validatebox内部提示信息的实现逻辑不合理,在调用验证器的validator函数之后,又对验证器的message属性做包装。
个人觉得提示信息应该完全在验证器内部实现,在外部再做包装是完全不合理的。其实这种情况目前主要就是为了处理length类型的验证器的提示信息,所以解决方案也比较明确和唯一:
- 修改源码,取消调用验证器之后再进一步对验证器的message属性做封装
- 覆写需要包装提示信息的验证器,验证器内部实现对提示信息的包装,目前只有length验证器
对于1.3.1版本,大概在5060行,注释掉以下代码:
//if(_396){
//for(var i=0;i<_396.length;i++){
//_397=_397.replace(new RegExp("\\{"+i+"\\}","g"),_396[i]);
//}
//}
覆写length类型验证器:
$.extend($.fn.validatebox.defaults.rules, {
multiple : {
validator : function(value, vtypes) {
var returnFlag = true;
var opts = $.fn.validatebox.defaults;
for (var i = 0; i < vtypes.length; i++) {
var methodinfo = /([a-zA-Z_]+)(.*)/.exec(vtypes[i]);
var rule = opts.rules[methodinfo[1]];
if (value && rule) {
var parame = eval(methodinfo[2]);
if (!rule["validator"](value, parame)) {
returnFlag = false;
this.message = rule.message;
break;
}
}
}
return returnFlag;
}
},
length : {
validator : function(value, param) {
this.message = 'Please enter a value between {0} and {1}.';
var len = $.trim(value).length;
if (param) {
for (var i = 0; i < param.length; i++) {
this.message = this.message.replace(new RegExp(
"\\{" + i + "\\}", "g"), param[i]);
}
}
return len >= param[0] && len <= param[1];
},
message : 'Please enter a value between {0} and {1}.'
}
});
使用方式:
<input class="easyui-validatebox" data-options="required:true,validType:'multiple[\'email\',\'length[0,20]\']'">
更新日志:
2012-12-11
在夏悸的一篇博文中提到了另一种解决方案,大家也可以参考一下:
$.extend($.fn.validatebox.defaults.rules, {
minLength : {
validator : function (value, param) {
var rules = $.fn.validatebox.defaults.rules;
rules.minLength.message = 'Please enter at least {0} characters.';
if(!rules.email.validator(value)){
rules.minLength.message = rules.email.message;
return false;
}
if(!rules.length.validator(value,param)){
rules.minLength.message = rules.length.message;
return false;
}
return value.length >= param[0];
},
message : ''
}
});
2013-01-06
自从1.3.2版本开始,validatebox自身已经支持多重校验了,例如:
input class="easyui-validatebox" data-options="required:true,validType:['email','length[0,20]']">
validatebox实现多重规则验证的更多相关文章
-
easyui关于validatebox实现多重规则验证的实践
参考资料 http://blog.csdn.net/jumtre/article/details/38510975 http://blog.csdn.net/lybwwp/article/detail ...
-
ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证
ASP.NET Identity除了提供基于Cookie的身份验证外,还提供了一些高级功能,如多次输入错误账户信息后会锁定用户禁止登录.集成第三方验证.账户的二次验证等,并且ASP.NET MVC的默 ...
-
证明你是你——快速开启Windows Azure多重身份验证
中国版Windows Azure的多重身份验证(Multi-Factor Authentication)功能已经开放.这个功能说白了就是要“证明你是你”.目前可以支持以下几种验证方式: 手机,短信验证 ...
-
宣布正式发布 Windows Azure 多重身份验证
身份和访问管理是安全之锚,是企业 IT 部门的首要任务.它是随时随地向员工.合作伙伴和客户提供访问的关键所在.今天,我们非常高兴地宣布正式发布 Windows Azure 多重身份验证,从而为 IT ...
-
go语言基础之可见性规则验证
1.可见性规则验证 如果想使用别的包的函数.结构体类型.络构体成员. 函数名.类型名,结构体成员变量名,首字母必段大写,可见. 如果首字母是小写,只能在同一个包里使用. 文件夹样例: 示例: vi t ...
-
判断密码是否可见/判断登录的状态/判断在form表单中 定义rules规则验证(iview)
一: 判断密码是否可见判断:type="visiblePassword ? 'text' : 'password'" 是否为false 或者 true 密码为输入框或者文本框点击眼 ...
-
在.NET Core 中使用 FluentValidation 进行规则验证
不用说,规则验证很重要,无效的参数,可能会导致程序的异常. 如果使用Web API或MVC页面,那么可能习惯了自带的规则验证,我们的控制器很干净: public class User { [Requi ...
-
EasyUI表单验证,自定义插件验证,自定义js插件验证,远程验证,常见手机号,中英文,qq等验证规则验证
{ field : 'startPort', title : "起始端口", editor: "text", width : 50, editor: { ...
-
Easyui validatebox后台服务端验证
Easyui validatebox的验证提示十分好用,可是在实际项目的运用中,经常会遇到需要服务器验证后并返回验证结果信息,比如验证用户名.手机号.邮箱是否已存在.于是就想着怎么拓展Easyui的验 ...
随机推荐
-
一步步搭建自己的博客 .NET版(2、评论功能)
前言 这次开发的博客主要功能或特点: 第一:可以兼容各终端,特别是手机端. 第二:到时会用到大量html5,炫啊. 第三:导入博客园的精华文章,并做分类.(不要封我) 第四:做 ...
-
js获取屏幕宽高
最近想自己实现一个全屏滚动. 结果一开始就遇到了问题.因为不知道如何获取一个页面屏幕的高度. 网上所有的博客都是复制粘贴. 网页可见区域宽:document.body.clientWidth 网页可见 ...
-
使用for循环遍历数组
package review20140419;/* * 遍历数组 */public abstract class Test1 { //程序入口 public static void mai ...
-
phpstudy 出现“请自行检查是否安装VC9运行库??”问题 -- 缺少vc9库
phpStudy是一款PHP调试环境的程序集成包,该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便.好用的 ...
-
N.O.W,O.R,N.E.V.E.R--12days to LNOI2015
双向链表 单调队列,双端队列 单调栈 堆 带权并查集 hash 表 双hash 树状数组 线段树合并 平衡树 Treap 随机平衡二叉树 Scapegoat Tree 替罪羊树 朝鲜树 块状数组,块状 ...
-
this关键字的解析
this关键字的作用: 1.表示类中的属性. class Person{ // 定义Person类 private String name ; // 姓名 private int age ; // 年 ...
-
java for循环
publicclass Test2 { staticboolean foo(char c) { System.out.print(c); returntrue; ...
-
【建图+最短路】Bzoj1001 狼抓兔子
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个 ...
-
将博客搬至CSDN https://blog.csdn.net/Fredric_2014
将博客搬至CSDN https://blog.csdn.net/Fredric_2014
-
第九篇 蓝图 blueprint
在Flask中的蓝图 blueprint 的作用就是将 功能 与 主服务 分开 比如说,你有一个客户管理系统,最开始的时候,只有一个查看客户列表的功能,后来你又加入了一个添加客户的功能(add_use ...