`

通用化Web表单验证方式的改进方案

阅读更多
验证时创建数组的函数,注意其与页面元素的对应关系。
<script LANGUAGE="JavaScript">
<!--
/**
* 取得需要验证的文本框控件数组
*/
function getCheckArray()
{
var arr=new Array(); 

arr[0]=createToBeCheckedObj("name","nameMsg","[\\u4E00-\\u9FA5]{2,3}","true"); 
arr[1]=createToBeCheckedObj("title","titleMsg","[\\u4E00-\\u9FA5]{2,5}","true"); 
arr[2]=createToBeCheckedObj("age","ageMsg","[2-5]{1}[0-9]{1}","false"); 
arr[3]=createToBeCheckedObj("pswd","pswdMsg","\\w+","true"); 
arr[4]=createToBeCheckedObj("email","emailMsg","\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\.\\w+([-.]\\w+)*","true"); 

return arr; 
}
//-->
</script>
3。创建验证数据结构的函数
/**//**
* Check a object will be checked when sbmit a form
*/
function createToBeCheckedObj(textboxName,msgSpanId,validChar,isRequired){
// Create the object will be checked
var toBeCheckedObj=new Object; 

// Set propertied to toBeCheckedObj
toBeCheckedObj.textboxName=textboxName; 
toBeCheckedObj.msgSpanId=msgSpanId; 
toBeCheckedObj.validChar=validChar; 
toBeCheckedObj.isRequired=isRequired; 

// create a method of toBeCheckedObj
toBeCheckedObj.showProperties=function(){
alert("TextboxName="+this.textboxName+" MsgSpanId="+this.msgSpanId+" ValidChar="+this.validChar+" IsRequired"+this.isRequired); 
}

// return the object will be checked
return toBeCheckedObj; 
}
4。验证函数

/**//**
* Check form
*/
function checkForm(toBeCheckedObjArray){

for(var i=0; i<toBeCheckedObjArray.length; i++){
var toBeCheckedObj=toBeCheckedObjArray[i]; 
// toBeCheckedObj.showProperties(); 

var checkResult=checkTextBox(toBeCheckedObj); 

if(checkResult){
document.getElementById(toBeCheckedObj.msgSpanId).className="feedbackHide"; 
}
else{ 
document.getElementById(toBeCheckedObj.msgSpanId).className="feedbackShow"; 
document.getElementById(toBeCheckedObj.textboxName).focus(); 
return false; 
} 
}

// alert("all passed"); 
return true; 
}

/**//**
* Check text field in the form
*/
function checkTextBox(toBeCheckedObj){
var validChar=toBeCheckedObj.validChar; 
var isRequired=toBeCheckedObj.isRequired; 
var inputValue=document.getElementById(toBeCheckedObj.textboxName).value; 

if(isRequired!="true" && inputValue.length<1){
return true; 
}
else{
var regexStr="^"+validChar+"$"; 
var regex=new RegExp(regexStr); 
return regex.test(inputValue); 
}
}
分享到:
评论
3 楼 lims 2008-08-08  
kuangbaoxu 写道
验证时创建数组的函数,注意其与页面元素的对应关系。
<script LANGUAGE="JavaScript">
<!--
/**
* 取得需要验证的文本框控件数组
*/
function getCheckArray()
{
var arr=new Array(); 

arr[0]=createToBeCheckedObj("name","nameMsg","[\\u4E00-\\u9FA5]{2,3}","true"); 
arr[1]=createToBeCheckedObj("title","titleMsg","[\\u4E00-\\u9FA5]{2,5}","true"); 
arr[2]=createToBeCheckedObj("age","ageMsg","[2-5]{1}[0-9]{1}","false"); 
arr[3]=createToBeCheckedObj("pswd","pswdMsg","\\w+","true"); 
arr[4]=createToBeCheckedObj("email","emailMsg","\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\.\\w+([-.]\\w+)*","true"); 

return arr; 
}
//-->
</script>
3。创建验证数据结构的函数
/**//**
* Check a object will be checked when sbmit a form
*/
function createToBeCheckedObj(textboxName,msgSpanId,validChar,isRequired){
// Create the object will be checked
var toBeCheckedObj=new Object; 

// Set propertied to toBeCheckedObj
toBeCheckedObj.textboxName=textboxName; 
toBeCheckedObj.msgSpanId=msgSpanId; 
toBeCheckedObj.validChar=validChar; 
toBeCheckedObj.isRequired=isRequired; 

// create a method of toBeCheckedObj
toBeCheckedObj.showProperties=function(){
alert("TextboxName="+this.textboxName+" MsgSpanId="+this.msgSpanId+" ValidChar="+this.validChar+" IsRequired"+this.isRequired); 
}

// return the object will be checked
return toBeCheckedObj; 
}
4。验证函数

/**//**
* Check form
*/
function checkForm(toBeCheckedObjArray){

for(var i=0; i<toBeCheckedObjArray.length; i++){
var toBeCheckedObj=toBeCheckedObjArray[i]; 
// toBeCheckedObj.showProperties(); 

var checkResult=checkTextBox(toBeCheckedObj); 

if(checkResult){
document.getElementById(toBeCheckedObj.msgSpanId).className="feedbackHide"; 
}
else{ 
document.getElementById(toBeCheckedObj.msgSpanId).className="feedbackShow"; 
document.getElementById(toBeCheckedObj.textboxName).focus(); 
return false; 
} 
}

// alert("all passed"); 
return true; 
}

/**//**
* Check text field in the form
*/
function checkTextBox(toBeCheckedObj){
var validChar=toBeCheckedObj.validChar; 
var isRequired=toBeCheckedObj.isRequired; 
var inputValue=document.getElementById(toBeCheckedObj.textboxName).value; 

if(isRequired!="true" && inputValue.length<1){
return true; 
}
else{
var regexStr="^"+validChar+"$"; 
var regex=new RegExp(regexStr); 
return regex.test(inputValue); 
}
}

丫的,我已经做出通用表单了,你再搞一个通用表单验证,这IT界呀,不好混了
2 楼 JerrySun 2008-08-08  
楼上的,你这叫通用吗!要是改天老板要求改一下字段,一大堆东西要改,而已如果说要移植数据库,你能担保SQL语句通用吗!!
1 楼 achun 2008-05-24  
<p>呵呵楼主的方法不错.<br/>我的项目里面也有这样的方案.<br/>由于进度问题,后台的验证搞定了.<br/>前台只是做了准备工作,代码还没有写.<br/>不过我比你的做法更极端.<br/>我直接把验证的规则写到了数据库的表定义里.给出一个user表的例子</p>
<pre name='code' class='sql'>CREATE TABLE `user` (                                                                                                      
          `id` int(11) NOT NULL auto_increment,                                                                                    
          `u_name` varchar(24) character set ascii NOT NULL COMMENT '{"name":"用户名","tolower":true,"alnum":true,"minlen":4}', 
          `nicheng` varchar(32) NOT NULL COMMENT '{"name":"昵称","nochar":" "}',                                                 
          `u_pass` varchar(32) character set ascii NOT NULL COMMENT '{"name":"密码","tomd5":true}',                              
          `mu_name` varchar(32) NOT NULL COMMENT '{"name":"密保"}',                                                              
          `mu_pass` varchar(32) character set ascii NOT NULL COMMENT '{"name":"密保答案","tomd5":true}',                       
          `gender` int(1) default '2' COMMENT '{"name":"性别","enmu":[0,1,2]}',                                                  
          `card` varchar(24) default NULL COMMENT '{"name":"身份证","idcard":true}',                                            
          `username` varchar(16) default NULL COMMENT '{"name":"真实姓名"}',                                                   
          `email` varchar(32) default '' COMMENT '{"name":"绑定邮箱","email":true}',                                           
          `qq` varchar(24) default NULL COMMENT '{"name":"QQ"}',                                                                   
          `msn` varchar(32) default NULL COMMENT '{"name":"MSN","email":true}',                                                    
          `img` varchar(50) default NULL COMMENT '{"name":"头像","img":true}',                                                   
          `signed` text COMMENT '{"name":"签名"}',                                                                               
          `birt` date default NULL COMMENT '{"name":"签名"}',                                                                    
          `u_time` timestamp NOT NULL default CURRENT_TIMESTAMP COMMENT '{"name":"申请日期","noinput":true}',                  
          `anmin` int(11) default '0' COMMENT '{"name":"权限","noinput":true}',                                                  
          `money` int(11) default '0' COMMENT '{"name":"积分","noinput":true}',                                                  
          `rat` int(11) default '1' COMMENT '{"name":"等级","noinput":true}',                                                    
          `exp` int(11) default '0' COMMENT '{"name":"经验","noinput":true}',                                                    
          `hb` int(11) default '0' COMMENT '{"name":"货币","noinput":true}',                                                     
          PRIMARY KEY  (`id`),                                                                                                     
          UNIQUE KEY `u_name_Index` (`u_name`)                                                                                     
        ) ENGINE=MyISAM AUTO_INCREMENT=36 DEFAULT CHARSET=utf8                                                                     
</pre>
 
<p>可以看到我直接把规则用json的形式写到了comment里.然后做一个小工具把这个信息根据应用的需求生成符合的结构,</p>
<p><strong>做成相应的前台js文件,和后台对应的配置文件.当然具体的验证规则要手工写了.</strong></p>
<p>虽然有一些细节的问题还要处理,但是都能解决的.</p>
<p>我计划的是基于这种方法,制作一个工具,来更好的实现和管理验证规则,管理字段之间的关系.现在还没有足够的时间.目的当然是通过这种方案,较系统的解决验证规则的问题.</p>
<p>当然对于不同的数据库,实现可能有所不同,例如上面的是MySQL的语法,由于MySQL不支持domain功能,如果换了支持domain功能的数据库的话,实现方法就可能有所不同了,</p>
<p>同样的道理,对于外键也是这样.</p>
<p>当然验证规则的定义是否写到comment里,根据数据库的不同是可以商榷的.</p>

相关推荐

    通用的JS表单验证

    "通用的JS表单验证"这个主题聚焦于如何利用JavaScript来确保用户在网页表单中输入的数据符合预设的规则,从而提高数据质量和用户体验。下面我们将深入探讨这个话题。 首先,表单验证是网页开发中的关键部分,它能...

    简单,熟练和通用的Web表单验证

    "简单,熟练和通用的Web表单验证"这一主题聚焦于提供一种方法,让开发者能够在多种Web表单中实现灵活且易于维护的验证机制。以下是这个主题涉及的一些核心知识点: 1. **HTML表单基础**:HTML是构建Web页面的基础,...

    Web通用的表单校验JS

    总之,"Web通用的表单校验JS"如LiveValidation中文修改版,提供了方便、灵活的客户端表单验证解决方案,简化了开发流程,提高了应用的质量和用户体验。无论你是新手还是经验丰富的开发者,掌握这样的工具都能极大地...

    基于Vue表单通用验证插件

    在开发Web应用程序时,表单验证是不可或缺的一部分,确保用户输入的数据符合预设的规则。基于Vue的表单通用验证插件是为了简化这一过程而设计的。这类插件通常提供了一套灵活的API和指令,帮助开发者轻松实现对表单...

    通用表单验证formvalidator4.1.3 后端验证

    通用表单验证FormValidator4.1.3是一个用于后端数据验证的工具,它提供了丰富的验证规则和便捷的API,帮助开发者确保用户提交的数据符合预设的格式和要求。FormValidator通常与前端表单交互,确保在数据提交到服务器...

    jQuery带Tips动画提示通用表单验证插件下载(jquery validate),动画效果漂亮

    《jQuery带Tips动画提示通用表单验证插件详解》 在网页开发中,表单验证是必不可少的一个环节,它能够确保用户输入的数据符合预设的规则,提高用户体验并减少服务器端的压力。jQuery Validate插件正是这样一个强大...

    开发技术-Web开发面向Web表单的信息抽取通用模型.zip

    这个压缩包文件“开发技术-Web开发面向Web表单的信息抽取通用模型.zip”显然关注的是如何构建一个通用模型来处理Web表单中的数据提取问题。下面我们将深入探讨这一主题。 首先,我们需要理解Web表单的作用。Web表单...

    Struts动态表单验证

    Struts动态表单验证是Java Web开发中一个关键的实践,尤其在构建MVC(Model-View-Controller)架构的应用程序时。Struts框架提供了一种有效的方法来处理用户输入并确保数据的完整性和安全性。在这个主题中,我们将...

    validate 通用Ajax无刷新表单验证类(JavaScript)

    在现代Web应用中,表单验证是不可或缺的一部分,它确保用户输入的数据符合预期,从而减少服务器端的压力,提升用户体验。`validate`是一个通用的Ajax无刷新表单验证类,使用JavaScript编写,它允许在用户提交数据...

    常用表单的PHP验证类

    在Web开发中,表单验证是一项至关重要的任务,它确保用户提交的数据符合预期的格式和标准,从而防止数据错误、安全漏洞以及恶意攻击。PHP作为流行的服务器端脚本语言,提供了丰富的功能来处理表单验证。本文将深入...

    万能表单验证

    10. **响应式验证**:随着移动设备的普及,表单验证也需要考虑不同屏幕尺寸和输入方式的影响,确保在各种设备上都能正常工作。 通过合理运用这些知识点,开发者可以构建出强大而健壮的表单验证系统,为用户提供安全...

    一个高效通用而又简单易用的客户端表单输入验证类库函数

    在Web开发中,表单验证是一项至关重要的任务,它确保用户提交的数据符合预期的格式和标准,从而提高数据质量和安全性。本项目提供了一个高效、通用且简单易用的客户端表单输入验证类库函数,专注于JavaScript和正则...

    JS实现的通用表单验证插件完整实例

    在当下Web开发中,表单验证是前端开发的重要组成部分,它确保用户提交的数据符合特定的格式和规则,从而避免了无效或恶意数据的输入。本文介绍了一个使用JavaScript实现的通用表单验证插件实例,该插件可以对常见的...

    validate 通用Ajax无刷新表彰验证类

    总的来说,"validate 通用Ajax无刷新表彰验证类"是现代Web应用中实现高效、友好、可定制化表单验证的一种强大工具,它简化了前端验证的实现,提升了用户交互体验,并为开发者提供了丰富的自定义选项和便利的API。...

    Web客户端统一验证JavaScript函数库组件概述Web客户端统一验证JavaScript函数库组件概述Web客户端统一验证JavaScript函数库组件概述Web客户端统一验证JavaScript函数库组件概述

    Web客户端统一验证JavaScript函数库组件是前端开发中一个至关重要的工具,它主要用于在用户提交数据前进行实时的数据验证,确保输入的信息符合预期的格式和规则,从而提高用户体验并减轻服务器端的压力。JavaScript...

    基于PHP+Ajax实现表单验证的详解

    表单验证是Web开发中的重要环节,它能有效防止无效数据的提交,提升用户体验。 首先,文章提到了利用键盘响应事件来实现实时验证。`onkeydown`和`onkeyup`事件可以在用户按下或释放键盘按键时触发。`onkeydown`在键...

    自定义表单设计思路.docx

    ### 自定义表单设计思路详解 #### 一、概述 自定义表单系统的设计目标是为了...通过合理规划功能模块、优化权限管理、提供强大的表单定制工具以及采用分层建模方法等方式,可以构建出既灵活又稳定的企业级表单系统。

    Axure WEB端通用组件交互规范手册 (Axure RP9作品).zip

    对于形式复杂或字段较多的表单验证及反馈效果同样不建议在原型中实现,相关反馈提示可以以标注的方式进行说明,本手册中也提供了关于表单验证反馈的示例。本手册可以应用于任何的WEB类项目原型,在实际应用可以根据...

    Web端常用的通用类库.zip

    6. **数据验证**:在Web表单处理中,数据验证是必不可少的。BsTools可能会提供一些验证规则,简化数据验证过程。 7. **异常处理**:类库可能包含了优雅的异常处理机制,可以统一处理错误并返回合适的错误信息,提升...

    Web测试通用测试用例.pdf

    基于提供的文件信息,以下是对“Web测试通用测试用例.pdf”的详细知识点解析: 首先,从文件名《Web测试通用测试用例.pdf》可以推断,该文档内容主要涉及在进行Web应用或网站测试时应遵循的通用测试用例或测试脚本...

Global site tag (gtag.js) - Google Analytics