基于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 相关文章推荐
Jquery+WebService 校验账号是否已被注册的代码
Jul 12 Javascript
Web开发者必备的12款超赞jQuery插件
Dec 03 Javascript
网页防止tab键的使用快速解决方法
Nov 07 Javascript
JS方法调用括号的问题探讨
Jan 24 Javascript
JavaScript计算两个日期时间段内日期的方法
Mar 16 Javascript
JavaScript判断是否为数字的4种方法及效率比较
Apr 01 Javascript
javascript框架设计之框架分类及主要功能
Jun 23 Javascript
Vue.js第四天学习笔记
Dec 02 Javascript
Angular2使用Augury来调试Angular2程序
May 21 Javascript
使用vue-router切换页面时实现设置过渡动画
Oct 31 Javascript
vue项目中使用多选框的实例代码
Jul 22 Javascript
小程序实现上下切换位置
Nov 16 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
PHP+Tidy-完美的XHTML纠错+过滤
2007/04/10 PHP
一家之言的经验之谈php+mysql扎实个人基本功
2008/03/27 PHP
PHP 遍历XP文件夹下所有文件
2008/11/27 PHP
一个很不错的PHP翻页类
2009/06/01 PHP
hessian 在PHP中的使用介绍
2010/12/13 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
2016/11/05 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
javascript EXCEL 操作类代码
2009/07/30 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
javascript中数组中求最大值示例代码
2013/12/18 Javascript
详细解读JavaScript编程中的Promise使用
2015/07/27 Javascript
javascript断点调试心得分享
2016/04/23 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
javascript使用闭包模拟对象的私有属性和方法
2016/10/05 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
总结js函数相关知识点
2018/02/27 Javascript
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
python黑魔法之编码转换
2016/01/25 Python
python机器学习之决策树分类详解
2017/12/20 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
python读取各种文件数据方法解析
2018/12/29 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
幼儿园心得体会范文
2016/01/21 职场文书
学校就业保障协议书
2019/06/24 职场文书
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js
Redis+AOP+自定义注解实现限流
2022/06/28 Redis