validatebox实现多重规则验证

作为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]‘]">
时间: 2024-12-05 16:22:14

validatebox实现多重规则验证的相关文章

easyui关于validatebox实现多重规则验证的实践

参考资料 http://blog.csdn.net/jumtre/article/details/38510975 http://blog.csdn.net/lybwwp/article/details/9028741/ 方法一: 自从1.3.2版本开始,validatebox自身已经支持多重校验了,例如: <input class="easyui-validatebox" data-options="required:true,validType:['email','

EasyUI 扩展自定义EasyUI校验规则 验证规则(常用的)

例如 校验输入框只能录入0-1000之间 最多有2位小数的数字 表单<input type="text" id="rate" name="rate" required="true" class="easyui-validatebox"  validType="rateCheck[0,1000]"  maxlength="6" /> $.extend($.f

启用和配置Office 365多重身份验证

有朋友问我,Office 365的账户安全性如何?如果别人知道我的账号和密码,那不就随时可以访问我的Office 365.其实Office 365里面有个多重身份验证. 什么是多重身份验证,以及它是如何工作的? 多重身份验证 (MFA) 或双重身份验证 (2FA) 是一种身份验证方法,该方法需要使用多种验证方式,并可为用户登录和交易添加另一道关键保护屏障. 该方法需要使用下列验证方式中的任意两种或更多种来发挥作用: 您知道的信息(通常为密码) 您拥有的东西(不易被复制的受信任设备,如电话) 您的

证明你是你——快速开启Windows Azure多重身份验证

中国版Windows Azure的多重身份验证(Multi-Factor Authentication)功能已经开放.这个功能说白了就是要“证明你是你”.目前可以支持以下几种验证方式: 手机,短信验证和语音回拨验证. 固话,语音回拨验证. 手机应用,目前只支持IOS和Windows Phone. 短信验证是我们最熟悉的一种方式,即:在登陆Windows Azure AD进行身份验证时,会向用户的手机发送一条验证码来验证用户身份:语音回拨验证在国外用的比较多,即:在登陆Windows Azure

输入框规则验证

开发过程中碰到有输入框的页面一般都需要对输入框进行某种规则验证,这里对常见规则验证进行了整理,Js实现网页端输入框规则验证,代码: var verify = (function(){ var verify = { /** * 验证是否未定义或null或空字符串 * @param {Object} str */ _isBlank:function(str){ return str == 'undefined' || String(str) == 'null' || $.trim(str) == '

解决升级SQL Server时遇到[报表服务器数据库未处于支持的兼容性级别或者无法建立连接]规则验证不通过问题

PS:标题有点长…… 在将SQL Server 2008 R2升级到SQL Server 2014时,遇到如下的规则验证错误: RS_ValidDatabaseVersion 检查该版本的报表服务器数据库能否由 Microsoft SQL Server 2014 报表服务器使用. 失败 报表服务器数据库未处于支持的兼容性级别或者无法建立连接.请使用 Reporting Services 配置管理器验证报表服务器配置,并且使用 SQL Server 管理工具验证兼容性级别. 具体提示信息可能是:有

go语音基础之可见性规则验证

1.可见性规则验证 如果想使用别的包的函数.结构体类型.络构体成员. 函数名.类型名,结构体成员变量名,首字母必段大写,可见. 如果首字母是小写,只能在同一个包里使用. 文件夹样例: 示例: vi test.go package test import "fmt" //如果首字母是小写,只能在同一个包里使用 type stu struct { id int } type Stu struct { //id int //如果首字母是小写,只能在同一个包里使用 Id int } //如果首

EasyUI 扩展自己定义EasyUI校验规则 验证规则(经常使用的)

比如 校验输入框仅仅能录入0-1000之间 最多有2位小数的数字 表单<input type="text" id="rate" name="rate" required="true" class="easyui-validatebox"  validType="rateCheck[0,1000]"  maxlength="6" /> $.extend($.

C# 字符串 数据类型 判断 与特定规则验证

验证字符串格式 1)判断字符串是否是常见数据类型,decimal,foalt,double,datetime,int等等 2)验证字符串符合特定规则    (1)邮箱地址,IP地址     (2)纯数字,纯字母(大写字母/小写字母),数字与字母   (3)电话号码,手机号码,出生日期 电子邮件格式.固定电话号码和手机号码格式等,我们经常会需要用到正则表达式. 但是正则表达式用起来性能会低一点,所以在需要验证的时候能不使用正则表达式还是尽量不要使用正则表达式. using System; usin