`
tower
  • 浏览: 239641 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个检验form数据合法性的js类

阅读更多

本文原创作品,如需转载请注明来源,作者:姜涛, towerjt@gmail.com

 

参考了一些其他人的代码,自己写了一个检验form数据合法性的js类

 

function ValidForm(formObj){
	
	function validateOnChange(){  
        var textfield = this;  
        var pattern = textfield.getAttribute("pattern").toString(); 
        var plen = pattern.length;
//        alert(plen);
        pattern = pattern.replace(/\//g,'');
//        alert(pattern);
        var value = this.value;  
          
//        alert(pattern+'  '+value+'  '+ value.search(pattern));  
        var required = textfield.getAttribute("required") != null;  
        
        if (!required && value.length==0){
        	textfield.className = "valid";
        	return;
        }
        
        if(value.search(pattern) == -1)
        	textfield.className = "invalid";  
        else 
        	textfield.className = "valid";   
    }; 
          
    this.form = formObj;
    
	this.defaultRegExp	= {
    	email : /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,
    	cnPhone : /^(\d{3,4}-)\d{7,8}(-\d{1,6})?$/,
    	cnMobile : /^1[3,5]\d{9}$/,
    	yid : /^[a-z][a-z_0-9]{3,}(@yahoo\.cn)?$/,
    	date : /^\d{4}\-[01]?\d\-[0-3]?\d$|^[01]\d\/[0-3]\d\/\d{4}$|^\d{4}年[01]?\d月[0-3]?\d[日号]$/,
    	integer : /^[1-9][0-9]*$/,
    	number : /^[+-]?[1-9][0-9]*(\.[0-9]+)?([eE][+-][1-9][0-9]*)?$|^[+-]?0?\.[0-9]+([eE][+-][1-9][0-9]*)?$|^0$/,
    	currency : /^\d*(.\d{1,2})?$|^0$/,
    	alpha : /^[a-zA-Z]+$/,
    	alphaNum : /^[a-zA-Z0-9_]+$/,
    	urls : /^(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,
    	chinese : /^[\u2E80-\uFE4F]+$/,
    	postal : /^[0-9]{6}$/
    };	
    
    this.bind = function(){
    	var needsValidation = false;  
        for(var j = 0;j < formObj.elements.length; j++){  
        	var e = formObj.elements[j];  
        	if(e.type != "text") continue;        	
        	var pattern = this.defaultRegExp[e.getAttribute("pattern")]; 
        	if (!pattern) pattern = e.getAttribute("pattern");
        	e.setAttribute("pattern", pattern);
        	var required = e.getAttribute("required") != null;  
                  
            if(required && !pattern){  
            	pattern = "\\S";  
            	e.setAttribute("pattern", pattern);   
            }                       
            if(pattern){  
                e.onchange = validateOnChange;  
                needsValidation = true;  
            }  
        }  
        //if(needsValidation) formObj.onsubmit = validateOnSubmit;    	
    };
    
    this.doValid = function(){
    	var invalid = false;  
        for(var i = 0; i < formObj.elements.length;i++){  
            var e = formObj.elements[i];  
            if(e.type == "text" && e.onchange == validateOnChange){  
                e.onchange();     
                if(e.className == "invalid") 
                {
                	invalid = true;
                	var tips = e.getAttribute("tips");
                	if (!tips) tips = "输入数据非法";
                	alert('提示 :' + tips);  
            		return false;  
                }
            }  
        }
        return true;
    };
}

 

 

使用方法

<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=GBK"></head>
<body>
<script src="validate_obj.js" ></script>                                            
<style>                                                                         
    input.invalid{background: #faa;}                                            
    input.valid{background: #afa;}                                              
</style>                                                                        
                                                                                
<form id="form1" name="form1">                                                                          
    name : <input type="text" name="name" required tips="名字非空"><br>                         
    email: <input type="text" name="email" pattern="email" tips="邮件地址:towerjt@gmail.com"><br>  
    zipcode : <input type="text" name="zipcode" pattern="^\s*\d{5}\s*$"><br>    
    unvalidate : <input type="text"><br>                                        
                                                                                
    <input type="submit" value="submit query">                                  
</form>

<script language="javascript">
	var vf = new ValidForm(document.getElementById('form1'));	
	vf.bind();	
</script>

<input type="button" value="增加" onClick="alert(vf.doValid());"/>
</body>
</html>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics