打印

通用表单有效性验证 函数

小弟我做的一个 通用表单有效性验证 函数 支持IE6和FireFox (我只用了FF1.07测试了)
做的不足之处或有什么错误还请见谅:-)
由于发帖的限制 我把js文件代码 放入了显示的主体文件中
checkform.js:
复制内容到剪贴板
代码:
/*
Copyright 2006
Author : Aojie
Version: 2.0 beta
简易表单检测函数
更新日期:2006.5.25
更新内容:增加了自定义有效认证(你可以输入正则表达式或按照提供的自定义标示输入)
使用方法:
先在<head></head>中加入<script type="text/javascript" src="checkform.js"/></script>
   
   在任意表单元素中设置class属性,然后在提交按钮中加入onClick="checkForm('表单的Id值');return false;"
一、 使用系统默认的认证方法
  
   
   class设置现在有如下几个选项
   
   email    按照email格式检测
   ip        按照ip规则检测
   num        按照数字检测
   numeng    按照数字加英文检测
   chinese    中文检测
   html        HTML标记检测
   
二、使用自定义认证方法
首先需要在head中定义自定义认证的标示 格式为diy+自定义名和值 例如电话的认证:
var diytel="^[0]736-0000000$";
说明以上用的是自定义中提供的自定义标示(有点像access)
您也可以使用 正则表达式
var diytrl="/^\\d{4}-\\d{7}$";
但是注意的是此时的[color=#0000FF]“\”[/color]必须换为[color=#0000FF]“\\”[/color]
必须以[color=#0000FF]“/”[/color]开头 才会认为是自定义的正则
你需要多少个自定义的就设置几个 最后就像设置class一样将起设置为 自己定义的名称
如:class="diytel"
*/
var allowtosubmit=true;
var o=Object;
function Replace(srcString,findString,replaceString){
    
    return ReplaceB(srcString,findString,replaceString,0);    
    
}
function ReplaceB(expression,find,replacewith,start){
    
    var index=expression.indexOf(find,start);    
    if(index==-1)
    return expression;    
    
    var findLen=find.length;    
    var newexp="";    
    newexp=expression.substring(0,index)+(replacewith)+(expression.substring(index+findLen));    
    
    return ReplaceB(newexp,find,replacewith,index+1+findLen);    
    
}
function checkForm(formName)
{
    
    
    allowtosubmit=true;
    
    var checktype;
    
    var objlength;
    
    var obj=document.getElementById(formName);
    
    objlength=obj.length;
    
    for(i=0;i<objlength;i++)
    {
        
        
        checktype=obj[i].className;
        
        try{ first3=checktype.substr(0,3)}catch(e){ first3="xxx";}
        
        if(checktype!=null&&first3!="diy")
        
          check(checktype,obj[i]);        
        else
        {
            
            if(checktype!=null) diyCheck(checktype,obj[i]);
            
            
            
        }
        
        
        
    }
    
    if(allowtosubmit){obj.submit();}else{alert("出错了 请注意红框呈现的部分\n 您输入的格式不符合相应要求。");}
    
    
    
    
}
function diyCheck(type,obj){
    
    
    
    
    
    if(eval(type).substr(0,1)=="/")
    {
        
        try{
            
            o=new RegExp(eval(type).replace("/",""));            
            
        }catch(err){
            
            alert("Error:"+err.number+":"+err.description);            
            
        }
        
        commonCheck(o,obj);        
        
    }
    else
    {
        
        type=eval(type);
        type=Replace(type,"[0]","[zero]");
        type=Replace(type,"0","\\d");
        type=Replace(type,"[zero]","[0]");
        type=Replace(type,"a","\\w");        
        
        
        try{
            
            o=new RegExp(type);            
            
        }catch(err){
            
            alert("Error:"+err.number+":"+err.description);            
            
        }
        
        commonCheck(o,obj);
        
        
    }
    
    
}
function check(type,obj){
    
    
    
    var regExp={
        
        
        "numeng":/^[A-Za-z0-9]+$/,
        "num":/^\d+$/,
        "email":/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/,
        "ip":/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/, 
        "html":/^<(.*)>.*<\/\1>$|<(.*)\/>$/,
        "chinese":/^[\u4e00-\u9fa5]+$/
        
        
    }
    
    
    try{
        
        
        
        if(eval("regExp."+type).test(obj.value))
        {
            
            
            obj.style.borderColor="";
            
            obj.style.borderStyle="";
            
            
            
            
        }
        
        else {
            
            
            obj.value="";
            
            obj.style.borderColor="red";
            
            obj.style.borderStyle="solid";            
            
            allowtosubmit=false;
            
            
            
            
        }
        
        
        
    }
    catch(e)
    {
        
        
        return false;
        
        
        
        
    }
    
    
    
    
    
}
function commonCheck(type,obj){
    
    
    if(type.test(obj.value))
    
    {
        
        
        obj.style.borderColor="";
        
        obj.style.borderStyle="";
        
        
        
        
    }
    
    else {
        
        
        obj.value="";
        
        obj.style.borderColor="red";
        
        obj.style.borderStyle="solid";        
        allowtosubmit=false;
        
        
        
        
    }
    
    
}


 提示:您可以先修改部分代码再运行
本帖最近评分记录
不好使呀
输入中文,还有错误
能说详细 点吗
我所指的是 如果是输入中文就 只能输入中文的 其他的不能输入
能告诉我你输入的什么吗 我好改
知道原因了
我在正则表达式中 少写了一个“+”号 现在改过来了

支持原创,不过由于此类代码过多,所以就只给一分了,呵呵

TOP

我想不应该在提示错误的时候把原有填写的内容清楚,应该保留让用户修改。

TOP

经典好帖!

TOP

好东西啊 收藏啊
www.bmx7.cn   Blog

TOP