- 浏览: 17339 次
- 性别:
- 来自: 上海
最新评论
前面的easyFormValidateWithJquery.js是基于 Jquery的,是我在工作中的第一个验证插件,使用起来比较灵活的。但是不足之处也显而易见,除了细节方面的诸多不足,最大的不足就是在于是干扰表单式的,所以一定要对表单的元素属性进行修改,这就在可重用性、维护性等方面造成了不便,这毕竟是把双刃剑,灵活的同时污染了表单。
其实在工作中很快我就写了第二个验证插件,这次是无干扰式的,而且是基于Dom的Javascript,不需要Jquery库支持。下面就附上代码。
//easyFormValidate2.0
//easyFormValidateWithDom.js
//本验证方法基本能满足简单的验证需求,如不能为空,必须是日期,必须是整数,最大值,最小值等
//本验证方法验证模式有2种:焦点离开文本域即验证和手动调用验证方法
//本验证方法失败信息显示方式有2种:alert提示信息+元素焦点;添加错误样式+元素焦点
//本验证方法是属于无干扰式的验证方法,只需要初始化验证信息即可。
//本验证方法最大缺点是由于是基于json的,并且使用了大量的对象for each语句,所以在大量元素验证的性能方面可能或有不如意的地方,
//但是完全可以胜任中小型的表单验证。
var SimpleValidate ={
validates:{
quick:{
},
normal:{}
},
elements:{
},
elmt:{
id:"1",
rule:[],
messages:[]
},
init:function(objs){
for(var obj in objs){
this.addToValidates(objs[obj]);
}
},
addToValidates:function(obj){
if(!obj)return;
var checkType = obj.checkType;
if(checkType=='quick'){
var eles = obj.eles;
this.addToElements(eles);
//if checkType is quick,add their focusout event;
this.addOnFocusOutEvent(eles);
}else if(checkType=='normal'){
var eles = obj.eles;
this.addToElements(eles);
//if checkType is normal,just do nothing except add elements.And when invoking the validate method,
//each elements in this.elements will be validated.
}
},
//initializaing the elements,add new elements to this.elements,give those elements their dom reference property;
addToElements:function(eles){
for(var id in eles){
var info = eles[id];
info.domEle = this.tools.getEle(id);
info.id = info.id||id;
this.elements[id]=info;
}
},
addOnFocusOutEvent:function(eles){
for(var f in eles){
var nScope = this;
nScope.elements[f].domEle.onfocusout=function(){
var ret = nScope.validateDomEle(this);
}
}
},
initMessage:function(myEle,rule){
var methodName = "";
for(var method in rule){
methodName = method.match(/\w+/)==null?method:method.match(/\w+/)[0];
if(methodName==''||this.rules.methods[methodName.toLowerCase()]==null||rule[method]=='')
continue;
var messages = myEle.messages;
if(!messages){
messages = {};
myEle.messages=messages;
}
messages[methodName]=rule[method];
}
},
validateRule:function(elmt,rule,param){
var result = this.rules.methods[rule.toLowerCase()].call(this,elmt,param);
if(!result){
var retMsg;
if(!this.elements[elmt.id]||!this.elements[elmt.id].messages)return this.messages[rule.toLowerCase()];
return this.elements[elmt.id].messages[rule.toLowerCase()]||this.messages[rule.toLowerCase()];
}
},
messages:{
"fill":"该输入项不能为空",
"date":"日期格式错误,必须为形如2001-01-01格式",
"email":"邮箱格式错误,必须为形如pdcss_gs@126.com格式",
"integer":"该输入项必须是非负整数",
"minlength":"最小长度没有符合要求",
"maxlength":"最大长度没有符合要求",
"rangelength":"长度范围没有符合要求",
"doctype":"不是有效的word类型",
"maxvalue":"最大值没有符合要求",
"minvalue":"最小值没有符合要求"
},
rules:{
methods:{
"fill":function(elmt){
return /\S/.test(elmt.value);
},
"date":function(elmt){
return /\d{4}-\d{2}-\d{2}/.test(elmt.value);
},
"email":function(elmt){
return /\w+@\w+\.\w+/.test(elmt.value);
},
"integer":function(elmt){
return /^\d*$/.test(elmt.value);
},
"minlength":function(elmt,param){
param = this.rules.parameters(param);
return this.tools.getLength(elmt.value)>=param[0];
},
"maxlength":function(elmt,param){
param = this.rules.parameters(param);
return this.tools.getLength(elmt.value)<=param[0];
},
"rangelength":function(elmt,param){
param = this.rules.parameters(param);
return this.tools.getLength(elmt.value)>=param[0]&&this.tools.getLength(elmt.value)<=param[1];
},
"doctype":function(elmt){
return /.+\.doc$/.test(elmt.value);
},
"maxvalue":function(elmt,param){
param = this.rules.parameters(param);
return elmt.value<=param[0];
},
"minvalue":function(elmt,param){
return elmt.value>=param[0];
},
"regex":function(elmt,param){
if(param.charAt(0)!='('||param.charAt(param.length-1)!=')')return false;
param = param.substring(1,param.length-2);
return new RegExp(param).test(elmt.value);
}
},
parameters: function(param){
var re = /[\(]?\s*(\w*)\s*[\s,\)]/g;
var arr="";
var retArray=[];
while ((arr = re.exec(param)) != null){
retArray.push(arr[1]);
}
return retArray;
}
},
tools:{
getLength:function(val){
var len = 0;
var ch;
if(val==null)
return len;
for(var i = 0; i<val.length;i=i+1){
ch=val.charCodeAt(i);
if(ch>255)
len+=2;
else
len=len+1;
}
return len;
},
convertToObj:function(rules,msgs){
var ruleArr = rules.split(";");
var msgArr = msgs.split(";");
var r={};
for(var i=0;i<ruleArr.length;i=i+1){
r[ruleArr[i]]=msgArr[i]==null?"":msgArr[i];
}
return r;
},
convertArrayToObj:function(rules,msgs){
var r={};
for(var i=0;i<rules.length;i=i+1){
r[rules[i]]=msgs[i]==null?"":msgs[i];
}
return r;
},
getFormByFormIndex:function(formIndex){
var retForm = document.getElementById(formIndex)||document.all(formIndex);
if(retForm&&retForm.length){
retForm = retForm[0];
}
return retForm;
},
getEle:function(eleIndex){
var retEle = document.getElementById(eleIndex)||document.all(eleIndex);
if(retEle&&retEle.length){
retEle = retEle[0];
}
return retEle;
},
getObjPropertyNum:function(obj){
var num =0;
for(var p in obj)num=num+1;
return num;
}
},
validate:function(){
var notError = true;
var elemts = this.elements;
for(var ele in elemts){
var myEle = elemts[ele];
var retMsg = this.validateMyEle(myEle);
if(retMsg){
this.addErrMsg(myEle,retMsg);
myEle.domEle.focus();
return false;
}else this.removeErrMsg(myEle);
}
return notError;
},
validateDomEle:function(domEle){
var myEle = this.elements[domEle.id||domEle.name];
if(!myEle)return;
var retMsg = this.validateMyEle(myEle);
if(retMsg){
this.addErrMsg(myEle,retMsg);
return false;
}else this.removeErrMsg(myEle);
},
addErrMsg:function(myEle,retMsg){
var eTypes = myEle.errorType;
var domEle = myEle.domEle;
if(!eTypes)return;
for(var i=0;i<eTypes.length;i=i+1){
var etype = eTypes[i];
if(etype=='alert'){
alert(retMsg);
}else if(etype=='page'){
var cName = domEle.className;
if(cName.indexOf("wrongClass")==-1){
domEle.className=domEle.className+" wrongClass";
domEle.title = retMsg;
}
}
}
},
removeErrMsg:function(myEle){
var eTypes = myEle.errorType;
var domEle = myEle.domEle;
if(!eTypes)return;
for(var i=0;i<eTypes.length;i=i+1){
var etype = eTypes[i];
if(etype=='page'){
var cName = domEle.className;
if(cName.indexOf("wrongClass")!=-1){
domEle.className = cName.replace("wrongClass","");
domEle.title = "";
}
}
}
},
validateMyEle:function(myEle){
if(!myEle)return;
var rule = myEle.rule;
var msg = myEle.message;
var domEle = myEle.domEle;
if(!domEle)return;
var rule = this.tools.convertArrayToObj(rule,msg);
var methodName;
var param;
this.initMessage(myEle,rule);
for(var method in rule){
methodName = method.match(/\w+/)==null?method:method.match(/\w+/)[0];
if(methodName==null||methodName==''||this.rules.methods[methodName.toLowerCase()]==null)
continue;
param = method.match(/\([\w,\s]*\)/)==null?"":method.match(/\([\w,\s]*\)/)[0];
if(methodName=='regex'){
param = method.substring(5);
}
var ret =this.validateRule(domEle,methodName,param);
if(ret!=null&&ret!='undefined'){
//formElement.focus();
return ret;
}
}
}
};
demo:
<html>
<head>
<script src="js/easyFormValidateWithDom.js" type="text/javascript"></script>
<script type="text/javascript">
function validate(){
if(!SimpleValidate.validate())return;
}
function init(){
SimpleValidate.init({
"validateA":{
checkType:"normal",//离开焦点即验证(quick);调用方法验证(normal)
eles:{
"inputC":{rule:["fill","integer"],message:["inputC不能为空"],errorType:["alert"]},
"inputD":{rule:["fill","regex(/\w*?hello\w*?/g)"],message:["inputD不能为空","输入项必须含有hello"],errorType:["alert"]}
}
},
"validateB":{
checkType:"quick",//离开焦点即验证(quick);调用方法验证(normal)
eles:{
"inputA":{rule:["fill","maxlength(3 ,4)"],message:["inputA不能为空","inputA最大长度为3"],errorType:["alert","page"]}
}
}
});
}
</script>
<style type='text/css'>
.wrongClass{ border: 1px dotted red; }
</style>
</head>
<body onload='init()'>
<form id='testForm'>
A:<input type=text value='need validate' id='inputA'><br>
B:<input type=text value='need not validate' id='inputB'><br>
C:<input type=text value='need validate' id='inputC'><br>
D:<input type=text value='custom regex validate' id='inputD'>
<input type=button value='Validate' onclick='validate()'>
</form>
</body>
</html>
其实在工作中很快我就写了第二个验证插件,这次是无干扰式的,而且是基于Dom的Javascript,不需要Jquery库支持。下面就附上代码。
//easyFormValidate2.0
//easyFormValidateWithDom.js
//本验证方法基本能满足简单的验证需求,如不能为空,必须是日期,必须是整数,最大值,最小值等
//本验证方法验证模式有2种:焦点离开文本域即验证和手动调用验证方法
//本验证方法失败信息显示方式有2种:alert提示信息+元素焦点;添加错误样式+元素焦点
//本验证方法是属于无干扰式的验证方法,只需要初始化验证信息即可。
//本验证方法最大缺点是由于是基于json的,并且使用了大量的对象for each语句,所以在大量元素验证的性能方面可能或有不如意的地方,
//但是完全可以胜任中小型的表单验证。
var SimpleValidate ={
validates:{
quick:{
},
normal:{}
},
elements:{
},
elmt:{
id:"1",
rule:[],
messages:[]
},
init:function(objs){
for(var obj in objs){
this.addToValidates(objs[obj]);
}
},
addToValidates:function(obj){
if(!obj)return;
var checkType = obj.checkType;
if(checkType=='quick'){
var eles = obj.eles;
this.addToElements(eles);
//if checkType is quick,add their focusout event;
this.addOnFocusOutEvent(eles);
}else if(checkType=='normal'){
var eles = obj.eles;
this.addToElements(eles);
//if checkType is normal,just do nothing except add elements.And when invoking the validate method,
//each elements in this.elements will be validated.
}
},
//initializaing the elements,add new elements to this.elements,give those elements their dom reference property;
addToElements:function(eles){
for(var id in eles){
var info = eles[id];
info.domEle = this.tools.getEle(id);
info.id = info.id||id;
this.elements[id]=info;
}
},
addOnFocusOutEvent:function(eles){
for(var f in eles){
var nScope = this;
nScope.elements[f].domEle.onfocusout=function(){
var ret = nScope.validateDomEle(this);
}
}
},
initMessage:function(myEle,rule){
var methodName = "";
for(var method in rule){
methodName = method.match(/\w+/)==null?method:method.match(/\w+/)[0];
if(methodName==''||this.rules.methods[methodName.toLowerCase()]==null||rule[method]=='')
continue;
var messages = myEle.messages;
if(!messages){
messages = {};
myEle.messages=messages;
}
messages[methodName]=rule[method];
}
},
validateRule:function(elmt,rule,param){
var result = this.rules.methods[rule.toLowerCase()].call(this,elmt,param);
if(!result){
var retMsg;
if(!this.elements[elmt.id]||!this.elements[elmt.id].messages)return this.messages[rule.toLowerCase()];
return this.elements[elmt.id].messages[rule.toLowerCase()]||this.messages[rule.toLowerCase()];
}
},
messages:{
"fill":"该输入项不能为空",
"date":"日期格式错误,必须为形如2001-01-01格式",
"email":"邮箱格式错误,必须为形如pdcss_gs@126.com格式",
"integer":"该输入项必须是非负整数",
"minlength":"最小长度没有符合要求",
"maxlength":"最大长度没有符合要求",
"rangelength":"长度范围没有符合要求",
"doctype":"不是有效的word类型",
"maxvalue":"最大值没有符合要求",
"minvalue":"最小值没有符合要求"
},
rules:{
methods:{
"fill":function(elmt){
return /\S/.test(elmt.value);
},
"date":function(elmt){
return /\d{4}-\d{2}-\d{2}/.test(elmt.value);
},
"email":function(elmt){
return /\w+@\w+\.\w+/.test(elmt.value);
},
"integer":function(elmt){
return /^\d*$/.test(elmt.value);
},
"minlength":function(elmt,param){
param = this.rules.parameters(param);
return this.tools.getLength(elmt.value)>=param[0];
},
"maxlength":function(elmt,param){
param = this.rules.parameters(param);
return this.tools.getLength(elmt.value)<=param[0];
},
"rangelength":function(elmt,param){
param = this.rules.parameters(param);
return this.tools.getLength(elmt.value)>=param[0]&&this.tools.getLength(elmt.value)<=param[1];
},
"doctype":function(elmt){
return /.+\.doc$/.test(elmt.value);
},
"maxvalue":function(elmt,param){
param = this.rules.parameters(param);
return elmt.value<=param[0];
},
"minvalue":function(elmt,param){
return elmt.value>=param[0];
},
"regex":function(elmt,param){
if(param.charAt(0)!='('||param.charAt(param.length-1)!=')')return false;
param = param.substring(1,param.length-2);
return new RegExp(param).test(elmt.value);
}
},
parameters: function(param){
var re = /[\(]?\s*(\w*)\s*[\s,\)]/g;
var arr="";
var retArray=[];
while ((arr = re.exec(param)) != null){
retArray.push(arr[1]);
}
return retArray;
}
},
tools:{
getLength:function(val){
var len = 0;
var ch;
if(val==null)
return len;
for(var i = 0; i<val.length;i=i+1){
ch=val.charCodeAt(i);
if(ch>255)
len+=2;
else
len=len+1;
}
return len;
},
convertToObj:function(rules,msgs){
var ruleArr = rules.split(";");
var msgArr = msgs.split(";");
var r={};
for(var i=0;i<ruleArr.length;i=i+1){
r[ruleArr[i]]=msgArr[i]==null?"":msgArr[i];
}
return r;
},
convertArrayToObj:function(rules,msgs){
var r={};
for(var i=0;i<rules.length;i=i+1){
r[rules[i]]=msgs[i]==null?"":msgs[i];
}
return r;
},
getFormByFormIndex:function(formIndex){
var retForm = document.getElementById(formIndex)||document.all(formIndex);
if(retForm&&retForm.length){
retForm = retForm[0];
}
return retForm;
},
getEle:function(eleIndex){
var retEle = document.getElementById(eleIndex)||document.all(eleIndex);
if(retEle&&retEle.length){
retEle = retEle[0];
}
return retEle;
},
getObjPropertyNum:function(obj){
var num =0;
for(var p in obj)num=num+1;
return num;
}
},
validate:function(){
var notError = true;
var elemts = this.elements;
for(var ele in elemts){
var myEle = elemts[ele];
var retMsg = this.validateMyEle(myEle);
if(retMsg){
this.addErrMsg(myEle,retMsg);
myEle.domEle.focus();
return false;
}else this.removeErrMsg(myEle);
}
return notError;
},
validateDomEle:function(domEle){
var myEle = this.elements[domEle.id||domEle.name];
if(!myEle)return;
var retMsg = this.validateMyEle(myEle);
if(retMsg){
this.addErrMsg(myEle,retMsg);
return false;
}else this.removeErrMsg(myEle);
},
addErrMsg:function(myEle,retMsg){
var eTypes = myEle.errorType;
var domEle = myEle.domEle;
if(!eTypes)return;
for(var i=0;i<eTypes.length;i=i+1){
var etype = eTypes[i];
if(etype=='alert'){
alert(retMsg);
}else if(etype=='page'){
var cName = domEle.className;
if(cName.indexOf("wrongClass")==-1){
domEle.className=domEle.className+" wrongClass";
domEle.title = retMsg;
}
}
}
},
removeErrMsg:function(myEle){
var eTypes = myEle.errorType;
var domEle = myEle.domEle;
if(!eTypes)return;
for(var i=0;i<eTypes.length;i=i+1){
var etype = eTypes[i];
if(etype=='page'){
var cName = domEle.className;
if(cName.indexOf("wrongClass")!=-1){
domEle.className = cName.replace("wrongClass","");
domEle.title = "";
}
}
}
},
validateMyEle:function(myEle){
if(!myEle)return;
var rule = myEle.rule;
var msg = myEle.message;
var domEle = myEle.domEle;
if(!domEle)return;
var rule = this.tools.convertArrayToObj(rule,msg);
var methodName;
var param;
this.initMessage(myEle,rule);
for(var method in rule){
methodName = method.match(/\w+/)==null?method:method.match(/\w+/)[0];
if(methodName==null||methodName==''||this.rules.methods[methodName.toLowerCase()]==null)
continue;
param = method.match(/\([\w,\s]*\)/)==null?"":method.match(/\([\w,\s]*\)/)[0];
if(methodName=='regex'){
param = method.substring(5);
}
var ret =this.validateRule(domEle,methodName,param);
if(ret!=null&&ret!='undefined'){
//formElement.focus();
return ret;
}
}
}
};
demo:
<html>
<head>
<script src="js/easyFormValidateWithDom.js" type="text/javascript"></script>
<script type="text/javascript">
function validate(){
if(!SimpleValidate.validate())return;
}
function init(){
SimpleValidate.init({
"validateA":{
checkType:"normal",//离开焦点即验证(quick);调用方法验证(normal)
eles:{
"inputC":{rule:["fill","integer"],message:["inputC不能为空"],errorType:["alert"]},
"inputD":{rule:["fill","regex(/\w*?hello\w*?/g)"],message:["inputD不能为空","输入项必须含有hello"],errorType:["alert"]}
}
},
"validateB":{
checkType:"quick",//离开焦点即验证(quick);调用方法验证(normal)
eles:{
"inputA":{rule:["fill","maxlength(3 ,4)"],message:["inputA不能为空","inputA最大长度为3"],errorType:["alert","page"]}
}
}
});
}
</script>
<style type='text/css'>
.wrongClass{ border: 1px dotted red; }
</style>
</head>
<body onload='init()'>
<form id='testForm'>
A:<input type=text value='need validate' id='inputA'><br>
B:<input type=text value='need not validate' id='inputB'><br>
C:<input type=text value='need validate' id='inputC'><br>
D:<input type=text value='custom regex validate' id='inputD'>
<input type=button value='Validate' onclick='validate()'>
</form>
</body>
</html>
- 表单验证.rar (5.2 KB)
- 下载次数: 3
相关推荐
这个"javaScript前台验证实例"的压缩包很可能包含了多种常见的前端验证示例,旨在帮助开发者理解和应用JavaScript进行有效的用户输入检查。 1. **用户名密码验证**: 在网页表单中,用户注册或登录时,通常需要...
JavaScript是网页开发中不可或缺的一部分,尤其在前端验证中发挥着至关重要的作用。...在实际应用中,还可以结合HTML5的内置验证功能,以及jQuery、React、Vue等库提供的验证插件,进一步提升验证功能的效率和灵活性。
Rapid_Validation_1.5.1是一款专为jQuery设计的前端验证插件,其主要功能是确保用户输入的数据符合预设的规则,从而实现高效、便捷的网页表单验证。 Rapid_Validation_1.5.1的特点在于它的兼容性和实用性。此插件...
"js前台插件集"是指一组用于增强网页用户体验和功能的JavaScript代码库或工具。这些插件可以帮助开发者快速实现各种交互效果、动画、数据处理等功能,大大提升了前端开发效率。 在给定的压缩包文件中,我们可以看到...
"前台这则验证代码"是一个专为前端设计的正则表达式验证插件,它允许开发者轻松地在页面中实现各种数据格式的验证,如邮箱、电话号码、身份证号等。 首先,我们需要了解正则表达式(Regular Expression),它是用来...
除了基本的日期选择外,my97日期插件还提供了许多扩展功能,如日期计算、日期验证、日期比较等。同时,它还支持事件监听,允许开发者在用户选择日期时执行自定义操作。 总的来说,my97日期插件以其强大的功能和易用...
《jQuery Validate 前台验证框架的详细使用指南》 jQuery Validate 是一款广泛使用的JavaScript库,专门用于在前端进行表单验证。它为HTML表单提供了强大的、易于使用的验证功能,能够有效地提升用户体验,确保用户...
1. **基本用法**:jQuery的核心并不直接包含验证插件,但可以借助jQuery Validation Plugin来实现。首先,需要在项目中引入jQuery库和Validation Plugin的JS和CSS文件。 2. **表单选择器**:通过`$('form')`选择...
本篇文章将详细介绍如何使用JavaScript实现常见的表单前台数据校验。 一、基础验证函数 在JavaScript中,我们可以自定义函数来检查用户输入的数据。例如,验证邮箱格式可以使用以下函数: ```javascript function...
为了解决上述问题,可以通过以下步骤来排除对所有前台JavaScript文件的编译验证,从而提高保存代码时的workspace构建速度: 1. **选中具体项目**: - 打开Eclipse。 - 在“Package Explorer”或“Project ...
【描述】:“很好用的前台验证控制输入的框架 个人写的 不好请见谅!” 描述中提到这是一个“很好用”的前台验证框架,意味着该框架可能具有易用性、高效性和灵活性等特点。它是作者个人编写的,这意味着它可能具有...
标题中的“检验前台js的文件”指的是前端JavaScript代码的验证功能。在Web开发中,前端验证是必不可少的一环,它确保用户输入的数据符合预设的规则,如邮箱格式、密码强度、电话号码格式等,从而减少无效数据提交到...
这款小型Web聊天插件是专为初学者设计的,旨在提供一个直观、简单的实例,帮助他们了解如何实现在Web环境中进行实时交互。通过学习和实践这个插件,开发者可以学习到以下关键知识点: 1. **WebSocket协议**:Web...
【标题】"前台JAVASCRIPT日期控件超级好用实例用过的"指的是在Web前端开发中使用JavaScript实现的一种高效、实用的日期选择器控件。这种控件通常用于网页表单,允许用户方便地选取日期,提高了用户体验。 【描述】...
jQuery Validate 是一个强大的前端验证插件,用于在用户提交表单前进行数据验证,确保输入的数据符合预设的规则。版本 1.9.0 是该插件的一个稳定版本,提供了丰富的验证规则和自定义选项。本文将详细介绍如何在实际...
4. **预请求脚本和测试脚本**:在发送请求前或接收响应后,你可以编写JavaScript脚本来执行预处理或验证任务。这有助于自动化测试和数据准备。 5. **响应查看和解析**:Postman不仅可以显示完整的HTTP响应,还可以...
它是浏览器端编程的基础,通过DOM(Document Object Model)操作网页元素,实现动态更新内容、表单验证等功能。而jQuery是一个JavaScript库,简化了JavaScript的使用,提供了丰富的API,让开发者能更高效地实现动画...
在本文档中,我们将探讨如何结合SpringMVC和Hibernate-validator框架,自动生成前端JavaScript验证代码,从而简化开发过程,提高代码复用性,并确保前后端验证规则的一致性。 首先,我们了解到,虽然Hibernate-...