基于Jquery的标签智能验证实现代码


Posted in Javascript onDecember 27, 2010

后经过一段对Jquery的学习,Jquery的强大解决了辅助代码过多不易维护的问题。
AutoValidate.JS

/// <reference path="../Scripts/jquery-1.4.1-vsdoc.js" /> 
//验证方法 v1.0,创建于2010-12-9 完成2010-12-16 MR.X 制 
//修改2010-12-10、2010-12-12、2010-12-15、2010-12-16添入信息提示动画效果 
//支持 type=text type=checkbox type=radio select 标签验证 
//vld="***"必填 格式验证 
//vld="n***"选填 格式验证 
//err="***"错误显示内容 
//super="y"用<span>追加提示信息,要用y以外字母得修改同级一组验证,同级一组的标签可以在第一个标签进行super="y"属性标识,其它不用 
//len="***"长度限制,用于textarea标签 
//<input id="***" type="text" vld="***" err="***" span="***" len="***"/> 
$(function () { 
//正则匿名对象 
var strRegex = {}; 
//错误信息匿名对象 
var strError = {}; 
//正确信息匿名对象 
var strRight = {}; 
/** 参数配置 start **/ 
//非空 
strRegex.NoNull = /[^\s]+/; 
strError.NoNull = "请填写内容,如123、中国!"; 
//邮箱 
strRegex.Email = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/; 
strError.Email = "请核对邮箱格式,如china@163.com!"; 
//网址 
strRegex.Url = /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^\"\"])*$/; 
strError.Url = "请核对网址格式,如https://3water.com!"; 
//账号 
strRegex.An = /^([a-zA-Z0-9]|[_]){6,16}$/; 
strError.An = "请核对账号格式,如china_56!"; 
//数字 
strRegex.Math = /\d+$/; 
strError.Math = "请核对数字格式,如1234!"; 
//年龄 
strRegex.Age = /^\d{2}$/; 
strError.Age = "请核对年龄格式,10~99岁之间!"; 
//邮编 
strRegex.Post = /^[1-9]\d{5}$/; 
strError.Post = "请核对邮编格式,如150001!"; 
//电话 
strRegex.Phone = /^((\d{11})|((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})))$/; 
strError.Phone = "请核对电话格式,如15546503251!"; 
//身份证 
strRegex.Card = /^(([1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[X,x]))|([1-9]\d{5}[1-9]\d{1}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])(\d{3})))$/; 
strError.Card = "请核对身份证格式,如230103190001010000!"; 
//金钱 
strRegex.Price = /^([1-9]\d*|0)(\.\d+)?$/; 
strError.Price = "请核对金钱格式,如99.98!"; 
//日期 
strRegex.Date = /((^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(10|12|0?[13578])([-\/\._])(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(11|0?[469])([-\/\._])(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(0?2)([-\/\._])(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([3579][26]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][13579][26])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][13579][26])([-\/\._])(0?2)([-\/\._])(29)$))/; 
strError.Date = "请核对日期格式,如1999.9.9、1999-9-9、1999.09.09!"; 
//时间 
strRegex.Time = /^([0-9]|[0-1][0-9]|[2][0-3])(:|:)([0-5][0-9])$/; 
strError.Time = "请核对时间格式,如23:59!"; 
strError.Length = "请核对输入信息长度,长度小于"; 
strRight.Info = "格式正确!"; //可以设置为空 
//下拉框 
strRegex.DDL = "请选择"; 
strError.DDL = "请选择选项"; 
//单个checkbox复选框 
strRegex.Check = "请选择"; 
strError.Check = "请选择选项"; 
//单个radio复选框 
strRegex.Radio = "请选择"; 
strError.Radio = "请选择选项"; 
//同级一组checkbox复选框 
strRegex.CheckGroup = "请选择"; 
strError.CheckGroup = "请选择选项"; 
//同级一组radio复选框 
strRegex.RadioGroup = "请选择"; 
strError.RadioGroup = "请选择选项"; 
//在标签后面追加信息 
var SpanError = "<span class='vldSpanErr'><img src='" + FilePath() + "images/error.gif' /></span>"; 
var SpanOk = "<span class='vldSpanRig'><img src='" + FilePath() + "images/ok.gif' /></span>"; 
/** 参数配置 end **/ 
/** Main **/ 
//文件目录,回返最顶级目录 ../ 
function FilePath() { 
var file = ""; 
var path = window.location.pathname.split('/'); 
$(path).each(function () { 
file = "../" + file; 
}); 
return file; 
} 
//页验证自检 
$("#form1 [vld]").blur(function () { 
RegexGether($(this)); 
}); 
//验证处理集合 
function RegexGether($ctrl) { 
switch ($ctrl.attr("vld")) { 
case "nonull": 
RegexNull($ctrl); 
break; 
case "age": 
RegexInputTextAll($ctrl, strRegex.Age, strError.Age); 
break; 
case "nage": 
RegexInputTextOnly($ctrl, strRegex.Age, strError.Age); 
break; 
case "date": 
RegexInputTextAll($ctrl, strRegex.Date, strError.Date); 
break; 
case "ndate": 
RegexInputTextOnly($ctrl, strRegex.Date, strError.Date); 
break; 
case "price": 
RegexInputTextAll($ctrl, strRegex.Price, strError.Price); 
break; 
case "nprice": 
RegexInputTextOnly($ctrl, strRegex.Price, strError.Price); 
break; 
case "email": 
RegexInputTextAll($ctrl, strRegex.Email, strError.Email); 
break; 
case "nemail": 
RegexInputTextOnly($ctrl, strRegex.Email, strError.Email); 
break; 
case "post": 
RegexInputTextAll($ctrl, strRegex.Post, strError.Post); 
break; 
case "npost": 
RegexInputTextOnly($ctrl, strRegex.Post, strError.Post); 
break; 
case "card": 
RegexInputTextAll($ctrl, strRegex.Card, strError.Card); 
break; 
case "ncard": 
RegexInputTextOnly($ctrl, strRegex.Card, strError.Card); 
break; 
case "time": 
RegexInputTextAll($ctrl, strRegex.Time, strError.Time); 
break; 
case "ntime": 
RegexInputTextOnly($ctrl, strRegex.Time, strError.Time); 
break; 
case "math": 
RegexInputTextAll($ctrl, strRegex.Math, strError.Math); 
break; 
case "nmath": 
RegexInputTextOnly($ctrl, strRegex.Math, strError.Math); 
break; 
case "url": 
RegexInputTextAll($ctrl, strRegex.Url, strError.Url); 
break; 
case "nurl": 
RegexInputTextOnly($ctrl, strRegex.Url, strError.Url); 
break; 
case "an": 
RegexInputTextAll($ctrl, strRegex.An, strError.An); 
break; 
case "nan": 
RegexInputTextOnly($ctrl, strRegex.An, strError.An); 
break; 
case "phone": 
RegexInputTextAll($ctrl, strRegex.Phone, strError.Phone); 
break; 
case "nphone": 
RegexInputTextOnly($ctrl, strRegex.Phone, strError.Phone); 
break; 
case "ddl": 
RegexSelect($ctrl); 
break; 
case "check": 
RegexInputCheckBoxRadioOnly($ctrl, strError.Check); 
break; 
case "radio": 
RegexInputCheckBoxRadioOnly($ctrl, strError.Radio); 
break; 
case "checkgroup": 
RegexInputCheckBoxRadioAll($ctrl, strError.CheckGroup); 
break; 
case "radiogroup": 
RegexInputCheckBoxRadioAll($ctrl, strError.RadioGroup); 
break; 
} 
} 
//标签内容空验证 
function RegexNull($ctrl) { 
if (strRegex.NoNull.test($ctrl.val())) { 
return RegexLen($ctrl); 
} 
else { 
Error($ctrl, strError.NoNull); 
return false; 
} 
} 
//验证多个同级一组input(type=radio)标签 或 input(type=checkbox)标签 
function RegexInputCheckBoxRadioAll($ctrl, error) { 
if ($ctrl.parent().children(":checked").length == 0) { 
if ($ctrl.parent().children().attr("super")) { 
//同级标签中可能会有多个[super='y']存在,只取一个,用return false;控制,执行一次就从循环体中跳出 
$ctrl.parent().children("[super='y']").each(function () { 
Error($(this), error); 
return false; 
}); 
} 
else { 
//同级一组标签一起报错 
$ctrl.parent().children("[type='" + $ctrl.attr("type") + "']").each(function () { 
Error($(this), error); 
}); 
} 
return false; 
} 
else { 
if ($ctrl.parent().children().attr("super")) { 
$ctrl.parent().children("[super='y']").each(function () { 
Ok($(this)); 
return false; 
}); 
} 
else { 
$ctrl.parent().children().each(function () { 
Ok($(this)); 
}); 
} 
return true; 
} 
} 
//验证单个input(type=radio)标签 或 input(type=checkbox)标签 
function RegexInputCheckBoxRadioOnly($ctrl, error) { 
if (!$ctrl.attr("checked")) { 
Error($ctrl, error); 
return false; 
} 
else { 
Ok($ctrl); 
return true; 
} 
} 
//select标签,选项验证 
function RegexSelect($ctrl) { 
if ($ctrl.val() == strRegex.DDL) { 
Error($ctrl, strError.DDL); 
return false; 
} 
else { 
Ok($ctrl); 
return true; 
} 
} 
//标签允许为空内容格式验证,type=text标签验证 
function RegexInputTextOnly($ctrl, Regex, error) { 
//先验证标签是否为空 
if (strRegex.NoNull.test($ctrl.val())) { 
return RegexOtherFormat($ctrl, Regex, error); 
} 
else { 
Ok($ctrl); 
return true; 
} 
} 
//标签不允许为空内容格式验证,type=text标签验证 
function RegexInputTextAll($ctrl, Regex, error) { 
//先验证标签是否为空 
if (strRegex.NoNull.test($ctrl.val())) { 
return RegexOtherFormat($ctrl, Regex, error); 
} 
else { 
Error($ctrl, error); 
return false; 
} 
} 
//标签内容格式验证 
function RegexOtherFormat($ctrl, Regex, error) { 
if (Regex.test($ctrl.val())) { 
return RegexLen($ctrl); 
} 
else { 
Error($ctrl, error); 
return false; 
} 
} 
//textarea标签长度验证 
function RegexLen($ctrl) { 
//标签中是否有len属性 
if ($ctrl.attr("len")) { 
var error = strError.Length + $ctrl.attr("len") + "字!"; 
if (parseInt($ctrl.val().length) > parseInt($ctrl.attr("len"))) { 
Error($ctrl, error); 
return false; 
} 
} 
Ok($ctrl); 
return true; 
} 
//格式验证错误显示 
function Error($ctrl, error) { 
//标签中有err属性,根据属性内容填入title中 
if ($ctrl.attr("err")) { 
error = $ctrl.attr("err"); 
} 
if ($ctrl.attr("super")) { 
//具有super属性标签追加span 
$ctrl.parent().find("span").remove(); 
$ctrl.parent().append(SpanError); 
$ctrl.parent().find("span").append(error); 
$ctrl.parent().find("span").fadeTo("slow", 0.66); 
} 
else { 
//追加到title属性中 
$ctrl.attr("title", error); 
$ctrl.addClass("error"); 
} 
} 
//格式验证无误,清除错误样式 
function Ok($ctrl) { 
//去除可以存在的错误样式 
if ($ctrl.attr("super")) { 
$ctrl.parent().find("span").remove(); 
} 
else { 
$ctrl.removeClass("error"); 
} 
if ($.trim($ctrl.val()).length > 0) { 
var right = strRight.Info; 
//检查标签中是否有rig属性 
if ($ctrl.attr("rig")) { 
right = $ctrl.attr("rig"); 
} 
//添加正确提示信息 
if ($ctrl.attr("super")) { 
$ctrl.parent().append(SpanOk); 
$ctrl.parent().find("span").append(right); 
$ctrl.parent().find("span").fadeTo("slow",0.99).fadeTo("slow",0.99).fadeTo("slow",0); 
} 
else { 
$ctrl.attr("title", right); 
} 
} 
} 
//提交自检 
$("#vldBtn").click(function () { 
$("#form1 [vld]").each(function () { 
RegexGether($(this)); 
}); 
//检查标签中样式是否有error 
if ($("#form1 [vld][class='error']").length > 0) { 
return false; 
} 
else { 
return true; 
} 
}); 
});

AutoValidate.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title></title> 
<link href="Css/style01.css" rel="stylesheet" type="text/css" /> 
<link href="Css/AutoValidate.css" rel="stylesheet" type="text/css" /> 
<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script> 
<script src="Scripts/Jquery.timer.js" type="text/javascript"></script> 
<script src="Js/style.js" type="text/javascript"></script> 
<script src="Js/AutoValidate.js" type="text/javascript"></script> 
</head> 
<body> 
<form id="form1"> 
<ul class="tab_ul"> 
<li> 
<p>姓名:</p> 
<p><input id="name" type="text" vld="nonull" err="okokok!!!" super="y" rig="格式蜚蜚蜚??蜚????蜚????蜚???a" /></p> 
</li> 
<li> 
<p>年龄:</p> 
<p><input id="age" type="text" vld="age" /></p> 
</li> 
<li> 
<p>日期:</p> 
<p><input id="date" type="text" vld="ndate" /></p> 
</li> 
<li> 
<p>金钱:</p> 
<p><input id="price" type="text" vld="nprice" /></p> 
</li> 
<li> 
<p>邮箱:</p> 
<p><input id="email" type="text" vld="email" /></p> 
</li> 
<li> 
<p>邮编:</p> 
<p><input id="post" type="text" vld="post" /></p> 
</li> 
<li> 
<p>电话:</p> 
<p><input id="phone" type="text" vld="phone" len="10" /></p> 
</li> 
<li> 
<p>身份证:</p> 
<p><input id="card" type="text" vld="card" /></p> 
</li> 
<li> 
<p>时间:</p> 
<p><input id="time" type="text" vld="ntime" /></p> 
</li> 
<li> 
<p>数字:</p> 
<p><input id="math" type="text" vld="nmath" /></p> 
</li> 
<li> 
<p>网址:</p> 
<p><input id="url" type="text" vld="url" /></p> 
</li> 
<li> 
<p>账号:</p> 
<p><input id="an" type="text" vld="nan" /></p> 
</li> 
<li style="height:60px"> 
<p>文本长度限制:</p> 
<p><textarea id="len" style="width:300px; height:50px;" len="50" vld="nonull"></textarea></p> 
</li> 
<li> 
<p>下拉框:</p> 
<p><select id="ddl" vld="ddl"><option>请选择</option><option value="1">中国</option></select></p> 
</li> 
<li> 
<p>方形复选框:</p> 
<p><input type="checkbox" id="check1" vld="check" value="1" /><label for="check1">是</label></p> 
</li> 
<li> 
<p>圆形复选框:</p> 
<p><input type="radio" id="radio1" vld="radio" value="1" /><label for="radio1">是</label></p> 
</li> 
<li> 
<p>方形复选框:</p> 
<p><input type="checkbox" id="Checkbox1" vld="checkgroup" name="dsa" value="1" err="必须选一个" super="y"/><label for="Checkbox1">是</label><input type="checkbox" id="Checkbox2" name="dsa" vld="checkgroup" value="1" /><label for="Checkbox2">是</label></p> 
</li> 
<li> 
<p>圆形复选框:</p> 
<p><input type="radio" id="radio2" vld="radiogroup" name="asd" value="1" /><label for="radio2">是</label><input type="radio" id="radio3" name="asd" vld="radiogroup" value="1" /><label for="radio3">是</label></p> 
</li> 
<li> 
<input id="vldBtn" type="button" value="确认" /> 
</li> 
</ul> 
</form> 
</body> 
</html>
Javascript 相关文章推荐
javascript web对话框与弹出窗口
Feb 22 Javascript
javascript document.referrer 用法
Apr 30 Javascript
jQuery+.net实现浏览更多内容(改编php版本)
Mar 28 Javascript
借助javascript代码判断网页是静态还是伪静态
May 05 Javascript
使用jquery.upload.js实现异步上传示例代码
Jul 29 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
Mar 23 Javascript
在JavaScript中访问字符串的子串
Jul 07 Javascript
JavaScript知识点总结之如何提高性能
Jan 15 Javascript
Jquery ajax请求导出Excel表格的实现代码
Jun 08 Javascript
AngularJS 所有版本下载地址
Sep 14 Javascript
jQuery插件autocomplete使用详解
Feb 04 Javascript
Layui之table中的radio在切换分页时无法记住选中状态的解决方法
Sep 02 Javascript
jQuery powerFloat万能浮动层下拉层插件使用介绍
Dec 27 #Javascript
在JavaScript中获取请求的URL参数[正则]
Dec 25 #Javascript
extjs之去除s.gif的影响
Dec 25 #Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
Dec 25 #Javascript
javascript与webservice的通信实现代码
Dec 25 #Javascript
基于node.js的快速开发透明代理
Dec 25 #Javascript
用方法封装javascript的new操作符(一)
Dec 25 #Javascript
You might like
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
优化PHP程序的方法小结
2012/02/23 PHP
50个PHP程序性能优化的方法
2014/06/02 PHP
PHP实现加密的几种方式介绍
2015/02/22 PHP
PHP中Array相关函数简介
2016/07/03 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
innerHTML 和 getElementsByName 在IE下面的bug 的解决
2010/04/09 Javascript
web性能优化之javascript性能调优
2012/12/28 Javascript
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
详解angular笔记路由之angular-router
2017/09/12 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
封装一下vue中的axios示例代码详解
2020/02/16 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
vue elementui tree 任意级别拖拽功能代码
2020/08/31 Javascript
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
python创建一个最简单http webserver服务器的方法
2015/05/08 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
总经理司机岗位职责
2014/02/06 职场文书
意向书范本
2014/07/29 职场文书
企业委托书范本
2014/09/13 职场文书
小学生推普周国旗下讲话稿
2014/09/21 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
暑期社会实践新闻稿
2015/07/17 职场文书
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏
Oracle锁表解决方法的详细记录
2022/06/05 Oracle
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技