*--------------- 客户端表单通用验证checkForm(oForm) -----------------

* 本程序最初是由wanghr100(灰豆宝宝.net)的checkForm基础上进行修改的,增加了很多功能,如下:

* 1.对非ie的支持

* 2.增加了内置表达式和内置提示

*  3.增加了显示方式(弹出式和页面显示式)

* 4.增加了显示一条和显示全部

* 5.进行了封装(CLASS_CHECK)

* 6.支持外接函数或表达式(应用在密码一致)

* 7.简化了调用方式,所有操作只需要

然后在HTML里定义各标签验证格式

* 8.对IE增加了对键盘输入的限制(如:定义usage='int'时,输入框只能输入数字(非IE无效)

* 9.增加了对disabled的不验证

* 10.自定义报警方式(重写showMessageEx方法)

*-----------------------------申明信息-----------------------------

*

* 作者: ttyp

* 邮箱: ttyp@21cn.com

* 博客: http://www.cnblogs.com/ttyp/

*  声明: 对本程序可以任意复制传播,但请保留这些声明,对于内置的表达式有些没有做到很严格,如果你

有好的建议和意见,欢迎邮件和我联系或者上我的博客留言

* 简介:

本程序只需要对需要验证的标签设置三个属性:usage,exp,tip

usage : 内置格式或表达式或函数

exp  : 正则表达式(注意如果指定了usage则忽略exp)

tip  : 出错提示(如果是内置格式可以不要此属性,有缺省提示)

调用时只需要引用

增加以上3个属性(不一定需要全部)

* 原作者: wanghr100(灰豆宝宝.net)

* email: wanghr100@126.com

*

*--------------- 客户端表单通用验证checkForm(oForm) -----------------

*/

function CLASS_CHECK()

{

this.pass  = true;  //是否通过验证

this.showAll = true;  //是否显示所有的验证错误

this.alert  = false; //报警方式(默认alert报警)

this.message = "";  //错误内容

this.first  = null;  //在显示全部验证错误时的第一个错误控件(用于回到焦点)

//定义内置格式

var aUsage =

{

"int":"^([+-]?)\\d+$",           //整数

"int+":"^([+]?)\\d+$",           //正整数

"int-":"^-\\d+$",            //负整数

"num":"^([+-]?)\\d*\\.?\\d+$",         //数字

"num+":"^([+]?)\\d*\\.?\\d+$",         //正数

"num-":"^-\\d*\\.?\\d+$",          //负数

"float":"^([+-]?)\\d*\\.\\d+$",         //浮点数

"float+":"^([+]?)\\d*\\.\\d+$",         //正浮点数

"float-":"^-\\d*\\.\\d+$",          //负浮点数

//邮件

"email":"^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$",

"color":"^#[a-fA-F0-9]{6}",          //颜色

"url":"^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?$", //联接

"chinese":"^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$",    //仅中文

"ascii":"^[\\x00-\\xFF]+$",          //仅ACSII字符

"zipcode":"^\\d{6}$",           //邮编

"mobile":"^0{0,1}13[0-9]{9}$",         //手机

"ip4":"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}.\\d{1,3}$",    //ip地址

"notempty":"^\\S+$",           //非空

"picture":"(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$", //图片

"rar":"(.*)\\.(rar|zip|7zip|tgz)$",        //压缩文件

"date":"^\\d{4}(\\-|\\/|\.)\\d{1,2}\\1\\d{1,2}$"        //日期

};

//缺省消息

var aMessage =

{

"int" :"请输入整数",           //整数

"int+" :"请输入正整数",           //正整数

"int-" :"请输入负整数",           //负整数

"num" :"请输入数字",           //数字

"num+" :"请输入正数",           //正数

"num-" :"请输入负整数",           //负数

"float" :"请输入浮点数",           //浮点数

"float+":"请输入正浮点数",          //正浮点数

"float-":"请输入负浮点数",          //负浮点数

"email" :"请输入正确的邮箱地址",         //邮件

"color" :"请输入正确的颜色",          //颜色

"url" :"请输入正确的连接地址",         //联接

"chinese":"请输入中文",           //中文

"ascii" :"请输入ascii字符",          //仅ACSII字符

"zipcode":"请输入正确的邮政编码",         //邮编

"mobile":"请输入正确的手机号码",         //手机

"ip4" :"请输入正确的IP地址",          //ip地址

"notempty":"不能为空",           //非空

"picture":"请选择图片",           //图片

"rar" :"请输入压缩文件",          //压缩文件

"date" :"请输入正确的日期"          //日期

}

var me = this;

function checkForm(oForm)

{

me.pass  = true;

me.message = "";

me.first = null;

var els = oForm.elements;

//遍历所有表元素

for(var i=0;i

{

//取得格式

var sUsage = els[i].getAttribute("Usage");

var sReg = "";

//如果设置Usage,则使用内置正则表达式,忽略Exp

if(typeof(sUsage)!="undefined"&&sUsage!=null)

{

//如果Usage在表达室里找到,则使用内置表达式,无则认为是表达式;表达式可以是函数;

if(aUsage[sUsage]!=null)

{

sReg = aUsage[sUsage];

}

else

{

try

{

if(eval(sUsage)==false)

{

me.pass  = false;

if(me.first==null)

{

me.first = els[i];

}

addMessage(getMessage(els[i]));

if(me.showAll==false)

{

setFocus(els[i]);

break;

}

}

}

catch(e)

{

alert("表达式[" + sUsage +"]错误:" + e.description)

return false;

}

}

}

else

{

sReg = els[i].getAttribute("Exp");

}

if(typeof(sReg)!="undefined"&&sReg!=null)

{

//对于失效状态不验证

if(isDisabled(els[i])==true)

{

continue;

}

//取得表单的值,用通用取值函数

var sVal = getValue(els[i]);

//字符串->正则表达式,不区分大小写

var reg = new RegExp(sReg,"i");

if(!reg.test(sVal))

{

me.pass  = false;

if(me.first==null)

{

me.first = els[i];

}

//alert(reg);

//验证不通过,弹出提示warning

var sTip = getMessage(els[i]);

if(sTip.length==0&&typeof(sUsage)!="undefined"&&sUsage!=null&&aMessage[sUsage]!=null)

{

sTip = aMessage[sUsage];

}

addMessage(sTip);

if(me.showAll==false)

{

//该表单元素取得焦点,用通用返回函数

setFocus(els[i]);

break;

}

}

}

}

if(me.pass==false)

{

showMessage();

if(me.first!=null&&me.showAll==true)

{

setFocus(me.first);

}

}

return me.pass;

}

/*

* 添加错误信息

*/

function addMessage(msg)

{

if(me.alert==true)

{

me.message += msg + "\n";

}

else

{

me.message += msg + "
";

}

}

/*

* 显示错误

*/

function getMessage(els)

{

var sTip = els.getAttribute("tip");

if(typeof(sTip)!="undefined"&&sTip!=null)

{

return sTip;

}

else

{

return "";

}

}

/*

* 显示错误

*/

function showMessage()

{

//外接显示错误函数

if(typeof(me.showMessageEx)=="function")

{

return me.showMessageEx(me.message);

}

if(me.alert==true)

{

alert(me.message);

}

else

{

var divTip;

divTip = document.getElementById("divErrorMessage");

try

{

if(typeof(divTip)=="undefined"||divTip==null)

{

divTip = document.createElement("div");

divTip.id   = "divErrorMessage";

divTip.name   = "divErrorMessage";

divTip.style.color = "red";

document.body.appendChild(divTip);

}

divTip.innerHTML = me.message;

}catch(e){}

}

}

/*

* 获得元素是否失效(失效的元素不做判断)

*/

function isDisabled(el)

{

//对于radio,checkbox元素,只要其中有一个非失效元素就验证

if(el.type=="radio"||el.type=="checkbox")

{

//取得第一个元素的name,搜索这个元素组

var tmpels = document.getElementsByName(el.name);

for(var i=0;i

{

if(tmpels[i].disabled==false)

{

return false;

}

}

return true;

}

else

{

return el.disabled;

}

}

/*

* 取得对象的值(对于单选多选框把其选择的个数作为需要验证的值)

*/

function getValue(el)

{

//取得表单元素的类型

var sType = el.type;

switch(sType)

{

//文本输入框,直接取值el.value

case "text":

case "hidden":

case "password":

case "file":

case "textarea": return el.value;

//单多下拉菜单,遍历所有选项取得被选中的个数返回结果"0"表示选中一个,"00"表示选中两个

case "checkbox":

case "radio": return getRadioValue(el);

case "select-one":

case "select-multiple": return getSelectValue(el);

}

//取得radio,checkbox的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数

function getRadioValue(el)

{

var sValue = "";

//取得第一个元素的name,搜索这个元素组

var tmpels = document.getElementsByName(el.name);

for(var i=0;i

{

if(tmpels[i].checked)

{

sValue += "0";

}

}

return sValue;

}

//取得select的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数

function getSelectValue(el)

{

var sValue = "";

for(var i=0;i

{

//单选下拉框提示选项设置为value=""

if(el.options[i].selected && el.options[i].value!="")

{

sValue += "0";

}

}

return sValue;

}

}

/*

* 对没有通过验证的元素设置焦点

*/

function setFocus(el)

{

//取得表单元素的类型

var sType = el.type;

switch(sType)

{

//文本输入框,光标定位在文本输入框的末尾

case "text":

case "hidden":

case "password":

case "file":

case "textarea":

try{el.focus();var rng = el.createTextRange(); rng.collapse(false); rng.select();}catch(e){};

break;

//单多选,第一选项非失效控件取得焦点

case "checkbox":

case "radio":

var els = document.getElementsByName(el.name);

for(var i=0;i

{

if(els[i].disabled == false)

{

els[i].focus();

break;

}

}

break;

case "select-one":

case "select-multiple":

el.focus();

break;

}

}

//自动绑定到所有form的onsubmit事件

if(window.attachEvent)

{

window.attachEvent("onload",function(){for(var i=0;i

}

else

{

window.onsubmit = function(e){var theFrom = e.target;if(theFrom){return checkForm(theFrom);}}

}

this.keyCheck = function()

{

if(window.attachEvent)

{

window.attachEvent("onload",function(){for(var i=0;i

}

else

{

//TOOD

}

function myKeyCheck(oForm)

{

var els = oForm.elements;

//遍历所有表元素

for(var i=0;i

{

//取得格式

var sUsage = els[i].getAttribute("Usage");

//如果设置Usage,则使用内置正则表达式,忽略Exp

if(typeof(sUsage)!="undefined"&&sUsage!=null)

{

switch(sUsage.toLowerCase ())

{

case "zipcode":

case "int":

els[i].onkeypress = function(){return /\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('+')<0?String.fromCharCode(event.keyCode)=="+":false)||(this.value.indexOf('-')<0?String.fromCharCode(event.keyCode)=="-":false);}

els[i].onpaste  = function(){return !clipboardData.getData('text').match(/\D/);}

els[i].ondragenter = function(){return false;}

els[i].style.imeMode= "disabled";

break;

case "mobile":

case "int+":

els[i].onkeypress = function(){return /\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('+')<0?String.fromCharCode(event.keyCode)=="+":false);}

els[i].onpaste  = function(){return !clipboardData.getData('text').match(/\D/);}

els[i].ondragenter = function(){return false;}

els[i].style.imeMode= "disabled";

break;

case "int-":

els[i].onkeypress = function(){return /\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('-')<0?String.fromCharCode(event.keyCode)=="-":false);}

els[i].onpaste  = function(){return !clipboardData.getData('text').match(/\D/);}

els[i].ondragenter = function(){return false;}

els[i].style.imeMode= "disabled";

break;

case "float":

case "num":

els[i].onkeypress = function(){return /[\+\-\.]|\d/.test(String.fromCharCode(event.keyCode));}

els[i].onpaste  = function(){return !clipboardData.getData('text').match(/\D/);}

els[i].ondragenter = function(){return false;}

els[i].style.imeMode= "disabled";

break;

case "float+":

case "num+":

els[i].onkeypress = function(){return /[\+\.]|\d/.test(String.fromCharCode(event.keyCode));}

els[i].onpaste  = function(){return !clipboardData.getData('text').match(/\D/);}

els[i].ondragenter = function(){return false;}

els[i].style.imeMode= "disabled";

break;

case "float-":

case "num-":

els[i].onkeypress = function(){return /[\-\.]|\d/.test(String.fromCharCode(event.keyCode));}

els[i].onpaste  = function(){return !clipboardData.getData('text').match(/\D/);}

els[i].ondragenter = function(){return false;}

els[i].style.imeMode= "disabled";

break;

case "ascii":

els[i].style.imeMode= "disabled";

break;

case "ip4":

els[i].onkeypress = function(){return /[\.]|\d/.test(String.fromCharCode(event.keyCode));}

els[i].onpaste  = function(){return !clipboardData.getData('text').match(/\D/);}

els[i].ondragenter = function(){return false;}

els[i].style.imeMode= "disabled";

els[i].maxLength = 15;

break;

case "color":

els[i].onkeypress = function(){return /[a-fA-Z]|\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('#')<0?String.fromCharCode(event.keyCode)=="#":false);}

els[i].onpaste  = function(){return !clipboardData.getData('text').match(/\D/);}

els[i].ondragenter = function(){return false;}

els[i].maxLength = 7;

els[i].style.imeMode= "disabled";

break;

case "date":

els[i].onkeypress = function(){return /[\/\-\.]|\d/.test(String.fromCharCode(event.keyCode));}

els[i].onpaste  = function(){return !clipboardData.getData('text').match(/\D/);}

els[i].ondragenter = function(){return false;}

els[i].style.imeMode= "disabled";

break;

}

}

}

}

}

}

//初始化

var g_check = new CLASS_CHECK();

g_check.keyCheck();

posted on 2008-01-25 10:16 强强 阅读(212) 评论(0)  编辑  收藏 所属分类: web技巧

oform java_客户端表单通用验证checkForm(oForm)(1)相关推荐

  1. 通用客户端表单验证函数修正版

    转载:PHPSOHO 通用客户端表单验证函数修正版 主要内容: 一.用法简介: 二.类型定义: 三.程序文件: 历史: 2005.2.25 修改为通用客户端表单验证函数修正版 2004.12.21  ...

  2. 通用客户端表单验证函数修正版(zz)

    通用客户端表单验证函数修正版 主要内容: 一.用法简介: 二.类型定义: 三.程序文件: 历史: 2005.2.25  修改为通用客户端表单验证函数修正版 2004.12.21     1.对整数的范 ...

  3. 客户端表单验证_客户端的表单验证

    客户端表单验证 在客户端进行表单验证是必不可少的-它可以节省时间和带宽,并为您提供更多选择,以指出用户填写表单时出错的地方. 话虽如此,我并不是说您不需要服务器端验证. 访问您网站的用户可能使用旧的浏 ...

  4. 在ASP.NET中如何用C#.NET实现基于表单的验证

    这篇文章引用到了Microsoft .NET类库中的以下名空间: System.Data.SqlClient System.Web.Security ------------------------- ...

  5. [转]在ASP.NET中如何用C#.NET实现基于表单的验证(二)

    (五)创建Logon.aspx页面 1.在已创建好的项目里创建一个新的Web 窗体,名为Logon.aspx. 2.在编辑器里打开Logon.aspx,切换到HTML视图. 3.复制下面代码,然后在编 ...

  6. 前端学习(1908)vue之电商管理系统电商系统之渲染修改用户的表单预先验证

    目录结构 router.js import Vue from 'vue' import Router from 'vue-router' import Login from './components ...

  7. html表单 asp验证,ASP中JavaScript处理复杂表单的生成与验证

    ASP中JavaScript处理复杂表单的生成与验证 更新时间:2007年03月25日 00:00:00   作者: 这里所谓的复杂表单,是指表单中包含多种不同的输入类型,比如下拉列表框.单行文本.多 ...

  8. 第三章 用检验控件执行表单的验证

    第三章 用检验控件执行表单的检验 主要内容: l 使用客户端检验 l 必填域控件:RequiredFieldValidator l 检验表达式控件:RegularExpressionValidator ...

  9. 新工具:表单/Cookie 验证网站爬网设置工具

    在今年3月份的blog里面,我曾经说过SharePoint Team将会发布一个补丁来让SharePoint Server 2007的搜索引擎支持对基于表单/Cookie验证的网站进行爬网.今天,Sh ...

最新文章

  1. 向人类再进一步|MIT×UMich探索可以理解物体空间关系的人工智能
  2. instanceof 实现
  3. 安装mysql 5.5.14 报错
  4. 13SpringMvc_限定某个业务控制方法,只允许GET或POST请求方式访问
  5. 今日收到的智商税:远红外
  6. python释放变量内存_Python尚学堂高淇|1113引用的本质栈内存,堆内存,内存的示意图,标识符,变量的声明初始化,垃圾回收机制...
  7. 蓝牙Bluetooth技术手册规范下载【转】
  8. 设计模式之开放封闭原则
  9. 计算机网络实验报告3-tcp,计算机网络实验报告3-TCP.doc
  10. linux echo设置颜色
  11. python商城源码_腾讯大佬用了10小时讲完的Python,整整400集,拿走不谢
  12. 20190906 On Java8 第十八章 字符串
  13. 如何保证战略落地_企业战略如何实现落地
  14. 大数据私房菜--Hadoop完全分布式安装
  15. 蓝牙配对连接HCI log学习
  16. 实战 逆向最新黄鸟抓包软件
  17. 如何创建 Ubuntu 信息亭(kiosk)
  18. 一个对付小孩便秘的指南,让麻麻不再当催屎员
  19. MALTAB中 imshow函数出错
  20. 完美世界16.65亿出售院线业务;共享床位涉黄被下线;宜家创始人去世丨价值早报

热门文章

  1. 锁Lock,主要是重入锁和读写锁
  2. 学习 服务器部署 hello world
  3. [转] js中的钩子机制(hook)
  4. Yeelink初步体验
  5. 【个性化阅读】ZapTxt的提醒姗姗来迟
  6. 面向对象的三大特性:封装、继承、多态
  7. VMware vCenter Server Appliance 模板部署
  8. 我的春Phone之行
  9. 拖动布局之保存布局页面
  10. 浅析HTML文档结构对DivCSS布局的意义