代码改变世界

Javascript客户端验证常用函数

2007-03-29 15:22  Rainbow  阅读(1269)  评论(0编辑  收藏  举报
//非空验证
function validNull(theId,msg)
{
    
if(document.getElementById(theId).value == "")
    {
        window.alert(msg);
        document.getElementById(theId).focus();
        
return false;
    }
    
return true;
}
//某控件不能为某值
function validCant(theId,theValue,msg)
{
    
if(document.getElementById(theId).value == theValue)
    {
        window.alert(msg);
        document.getElementById(theId).focus();
        
return false;
    }
    
return true;
}
//Email格式验证
function validEmail(theId,msg)
{
    var email 
= /^[_a-zA-Z0-9+.]+@([_a-zA-Z0-9]+.)+[a-zA-Z0-9]{2,3}$/;
    
if(email.test(document.getElementById(theId).value))
    {
        
return true;
    }
    
else
    {
        window.alert(msg);
        document.getElementById(theId).focus();
        
return false;
    }
}
//密码验证,不能包含特殊字符<>"'和空格
function validPassword(theId,msg)
{
    var reg 
= /^[^<>'" ]*$/;
    if(reg.test(document.getElementById(theId).value))
    {
        
return true;
    }
    
else
    {
        window.alert(msg);
        document.getElementById(theId).focus();
        
return false;
    }
}
//整数验证
function validInt(theId)
{
    var myInt 
= /^d*$/;
    
if(myInt.test(document.getElementById(theId).value))
    {
        
return true;
    }
    
else
    {
        window.alert(msg);
        document.getElementById(theId).focus();
        
return false;
    }
}
//两值比较
function validCompare(theId1,theId2,msg)
{
    
if(document.getElementById(theId1).value == document.getElementById(theId2).value)
    {
        
return true;
    }
    
else
    {
        window.alert(msg);
        document.getElementById(theId1).focus();
        
return false;
    }
}
//字段长度验证(x位至y位)
function validLength(theId,x,y,msg)
{
    
if(document.getElementById(theId).value.length < x || document.getElementById(theId).value.length > y)
    {
        window.alert(msg);
        document.getElementById(theId).focus();
        
return false;
    }
    
return true;
}


/* 描述: 验证日期 格式####-## */
function isDateNY(str)
{
    
var d = new Date();
    
var y = d.getFullYear();
    
var m = d.getMonth() + 1;
    m 
= ("00" + m).substr((m + "").length);
    
var a = str.match(/^(d{4})(-|/)(d{2})$/);
    
    
if ((!a)||(parseInt(str.substr(5,2),10)>12)||(parseInt(str.substr(5,2),10)<1))
    {
        
return false;
    }
    
return true;
}
/* 描述: 验证是否是浮点数 */
function isDecimal(str) {
    
if(!/^d+.d*$/.test(str)){
        
return false;
    }
    
return true;
}
/* 描述: 验证是否为年份 */
function isYear(strYear){
    
var iYear   =parseInt(strYear,10);
    
if (iYear<1900 || iYear>9000)
       
return false;
    
return true;
}

/* 描述: 验证是否为月份 */
function isMonth(strMon){
    
var iMon   =parseInt(strMon,10);
    
if(iMon<0 || iMon>12)
       
return false;
    
return true;
}
/* 描述:是否是整数 */
function isNumber(str) {
    
for(var i=0;i<str.length;i++)
        
if(str.charCodeAt(i)<0x0030 || str.charCodeAt(i)>0x0039return false;
    
return true;
}

/* 描述: 验证是否为日 */
function isDay(strDay){
    
var iDay   =parseInt(strDay,10);
    
if(iDay<0 || iDay>31)
       
return false;
    
return true;
}


/* 描述: 验证是否为normal类型*/
function _isnormal(str) {
    
if (/[^ws一--()]/i.test(str)){
            
return false;
        }
    
return true;
}


/* 描述: 验证是否为integer类型 */
function _isinteger(str) {
    
return /^d+$/.test(str)

}

/* 描述: 验证是否为decimal类型 */
function _isdecimal(str){
    
if (/[^d.]/i.test(str)){
            
return false;
        }
    
return true;
}

/* 描述: 验证是否为extend类型 */
function _isextend(str) {
    
if (/[^ws-(-)]/i.test(str)){
            
return false;
        }
    
return true;
}

/* 描述: 验证是否为date类型 */
function _isdatetime(str){
        
if(/[^d-]/i.test(str)) {
            
return false;
        }
    
return true;
}

/* 描述: 验证是否为mail类型 */
function _ismail(str){
        
if(/[^w一--.@]/i.test(str)) {
            
return false;
        }
    
return true;
}

/* 描述: 检查对象的输入长度 */
function checkLength(obj,length){
    
var tempValue=obj.value;
    
if (obj.value.Tlength()>length){
        createInfoPop(
"输入长度不能大于"+length,obj,200,50);
        obj.value
=obj.value.substr(0,length);
        
if (tempValue==obj.value){
            obj.value
="";
        }
    }
}

/* 描述: 输入字符的控制  */
function changeValue(obj,type){

    
switch(type){
        
//包含数字、字母、汉字、下载线、中划线、()
        case "normal":
            
if (!_isnormal(obj.value)){
                createInfoPop(
"只能包含数字、字母、汉字、下划线、中划线、空格、()",obj,200,50);
                obj.value
=obj.value.replace(/[^ws一--()]/g,"");
            }
            
break;
        
//整数
        case "integer":
            
if (obj.value==""break;
            
if (!_isinteger(obj.value)){
                createInfoPop(
"只能包含数字",obj,200,50);
                obj.value
=obj.value.replace(/D/g,"");
            }
            
break;

        
//浮点数
        case "decimal":
            
if (!_isdecimal(obj.value)){
                createInfoPop(
"只能包含数字、小数点",obj,200,50);
                obj.value
=obj.value.replace(/[^d.]/,"");
            }
            
break;
        
//包含数字、字母、下载线、中划线、()
        case "extend":
            
if (!_isextend(obj.value)){
                createInfoPop(
"只能包含数字、字母、下划线、中划线、()",obj,200,50);
                obj.value
=obj.value.replace(/[^ws-()]/g,"");
            }
            
break;

        
//包含数字、中划线
        case "date":
            
if (!_isdatetime(obj.value)){
                createInfoPop(
"只能包含数字、中划线",obj,200,50);
                obj.value
=obj.value.replace(/[^d-]/g,"");
            }
            
break;
        
//包含数字、汉字、下划线、中划线、·、@
        case "email":
            
if (!_ismail(obj.value)){
                createInfoPop(
"只能包含数字、字母、汉字、下划线、中划线、.、@",obj,200,50);
                obj.value
=obj.value.replace(/[^w一--@.]/g,"");
            }
            
break;
    }
}

/* 描述: 失去焦点后,检查输入是否正确 */
function blurValue(obj,type,length,prec){
    
if (!prec) prec=2;// 默认精度为2
    if (obj.value==""return false;
    
switch(type){
        
case "decimal":
            
if (obj.value.indexOf(".")==-1){
                
if ( _isinteger(obj.value)){
                    
if (obj.value.length>(length-prec)){
                        createInfoPop(
"整数部分长度不能大于"+(length-prec)+"",obj,200,50);
                        obj.value
="";
                        
break;
                    }
else{
                        obj.value
+="."+repeatStr("0",prec);
                    }
                }
            }
            
else{
                
if (obj.value.substr(0,obj.value.indexOf(".")).length>(length-prec)){
                    createInfoPop(
"整数部分长度不能大于"+(length-prec)+"",obj,200,50);
                    obj.value
="";
                    
break;
                }
                
if (obj.value.substr(obj.value.indexOf(".")+1).length<prec){
                    obj.value
+=repeatStr("0",prec-obj.value.substr(obj.value.indexOf(".")+1).length);
                }
            }
            
if (!isDecimal(obj.value)){
                createInfoPop(obj.value
+"不是浮点数",obj,200,50);
                obj.value
="";
                
break;
            }
            checkLength(obj,length
+1);
            
if (obj.value.substr(obj.value.indexOf(".")).Tlength()>(prec+1)){
                createInfoPop(
"精度不能大于"+prec,obj,200,50);
                obj.value
=obj.value.substr(0,obj.value.indexOf(".")+prec+1);
            }
            
//格式化数字的格式
            formatDecimal(obj);
            
break;
        
case "integer":
            
if (isNumber(obj.value)){
                
if (obj.value.length>length){
                    createInfoPop(
"长度不能大于"+length,obj,200,50);
                    obj.value
="";
                }
            }
else{
                createInfoPop(obj.value
+"不是整数",obj,200,50);
                obj.value
="";
            }
            
break;
        
case "date":
            
if (!isDate(obj.value)){
            createInfoPop(obj.value
+"不是日期格式<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;格式:(####-##-##)",obj,200,50);
                obj.value
="";
            }
            
break;
        
case "email":
            
if (!isEmail(obj.value)){
                createInfoPop(
"email 格式不正确",obj,200,50);
                obj.value
="";
                
break;
            }
            checkLength(obj,length);
            
break;
        
case "cbo":
        
//-----------------------------------------------------------------------------
        // 说明:当类型为cbo时,length属性改为cboName
        //-----------------------------------------------------------------------------
            var cboObj;
            
var sValue;
            cboObj 
= document.all.item(length);
            sValue
="";
            
            
if (obj.value.Tlength()<=0){
                
break;
            }
            
for(var i=0;i<cboObj.options.length;i++)
            {
                
if(obj.value == cboObj.options[i].value)
                {
                    sValue 
= obj.value + "-" + cboObj.options[i].text;
                    
break;
                }
                
else if(obj.value == cboObj.options[i].text)
                {
                    sValue 
= cboObj.options[i].value + "-" + obj.value;
                    
break;
                }
                
else if(obj.value == (cboObj.options[i].value + "-" + cboObj.options[i].text))
                {
                    sValue
=cboObj.options[i].value + "-" + cboObj.options[i].text;
                    
break;
                }
            }
            obj.value
=sValue;

            
break;
        
//-----------------------------------------------------------------------------
        // 简短日期格式
        case "date_NY":
        
            
if(obj.value.substr(0).length < 4)
                {
                    obj.value 
= "";
                    
break;
                }
                
if(obj.value.substr(0).length == 4)
                {
                    obj.value 
+= "-01";
                    
break;
                }
                
if(obj.value.indexOf("-"!= "-1")
                {
                    
if(obj.value.substr(0,obj.value.indexOf("-")).length<4)
                    {
                        obj.value
="";
                        
break;
                    }
                    
if (obj.value.substr(obj.value.indexOf("-"+ 1).length<2)
                    {
                        
if(obj.value.substr(obj.value.indexOf("-"+ 1== "")
                        { 
                            obj.value 
= obj.value.substring(0,obj.value.indexOf("-")) + "-01";
                            
break;
                        }
                        
if(eval(obj.value.substr(obj.value.indexOf("-")+1)) < 1)
                        {
                            obj.value
=obj.value.substring(0,obj.value.indexOf("-")) + "-01";
                        }
                        
else
                        {
                            obj.value 
= obj.value.substring(0,obj.value.indexOf("-")) + "-0" + obj.value.substr(obj.value.indexOf("-"+ 1);
                        }
                    } 
                }
                
                
if(isDateNY(obj.value) == false)
                {
                    createInfoPop(
"日期必须符合日期格式!",obj,250,28);
                    obj.value 
= "";
                    obj.focus();
                }
                
                
break;
            
        
case "nullmode":
            checkLength(obj,length);
            
break;
    }
}

/* 描述:格式化浮点数 */
function formatDecimal(obj){
    
var precStr="";
    
var reg_exp;
    reg_exp
=new RegExp("^0+([1-9].+|0..+)","g");
    obj.value
=obj.value.replace(reg_exp,"$1");
    
    precStr
=obj.value.substr(obj.value.indexOf('.'));
    
if (obj.value.length>0){
    
var num = parseInt(obj.value,10);    
    
if(num >= 1000)
    {
            
var number_string = Math.abs(num).toString();
            
var insert_position;
            
            
switch(number_string.length % 3)
            {
                
case 1:insert_position = 1;
                
break;
                
case 2:insert_position = 2;
                
break;
                
case 0:insert_position = 3;
                
break;
            }        
            
while(insert_position < number_string.length)
            {
                number_string 
= number_string.left(insert_position) + "," + number_string.substring(insert_position);
                insert_position 
+= 4;
            }    
                obj.value 
= number_string+precStr;

    }
    }
}
/* 描述: 恢复浮点数显示 */
function restoreFormat(obj){
    
var reg_exp = new RegExp(",","g");
    obj.value 
= obj.value.replace(reg_exp,"");

    
if (obj.value.indexOf(".")!=-1){
        
var j=1;
        
for(i=obj.value.substr(obj.value.indexOf(".")).length-1;i>0;i--){
            
if(obj.value.substr(obj.value.indexOf(".")+i,1)=="0"){        
                j
+=1;
            }
            
else{
                
break;
            }
        }
        i
=obj.value.substr(obj.value.indexOf(".")).length;
        obj.value
=obj.value.substr(0,obj.value.indexOf(".")+i-j+1);
    }
    
with(document.selection.createRange())
    {
        moveStart(
"character",obj.value.length+1);
        collapse();
        select();
    }
}

具体调用如下:
 changeValue (obj,type)

 描述:输入字符的控制

 说明:

obj:需检查的客户端控件

type:输入类型

{normal: 包含数字、字母、汉字、下载线、中划线、()}

{integer:包含数字}

{decimal:包含数字、小数点}

{extend: 包含数字、字母、下载线、中划线、()}

{date: 包含数字、中划线}

{email: 包含数字、汉字、下划线、中划线、小数点、@}

 样例:

1) 邮件格式检测

<input type=”button” name=”txtMail” onKeyup=”changeValue(this,’email’);” >

2) 日期格式检测

<input type=”button” name=”txtDate” onKeyup=”changeValue(this,’date’);” >

3) 浮点数检测

<input type=”button” name=”txtNumber” onKeyup=”changeValue(this,’decimal’);” >

 

 

 blurValue(obj,type,length,prec)

 描述:失去焦点后,检查输入是否正确

 说明:

obj:需检查的客户端控件

type:输入类型

{decimal:验证输入值是否是浮点数及格式化浮点数、检查长度}

{date:验证输入值是否是日期格式及格式化日期但无需检查长度}

{email:验证输入值是否是email格式、检查长度}

{nullmode:仅检查输入值的长度}

 length:最大输入长度

 prec:小数位精度,默认2位

样例:

1)      浮点数

<input type=”button” name=”txtMail” onBlur=”blurValue(this,’decimal’,10,3);” >

2)      日期

<input type=”button” name=”txtDate” onBlur=”blurValue(this,’date’);” >

3)      邮件地址

<input type=”button” name=”txtMail” onBlur=”blurValue(this,’email’,20);” >

4)      仅检测长度

<input type=”button” name=”txt1” onBlur=”blurValue(this,’nullmode’,20);” >

注:changValue与blurValue配合使用

如果是浮点数检测还要与restoreFormat配合使用

 restoreFormat(obj)

 描述:恢复浮点数显示

  说明:内部函数,将格式化过的数据赋给obj.value对象

样例:<input type=”button”name=”txt1” onFocus=”restoreFormat(this);”>

另外在Asp.Net中调用方法如下:
        txtCJG.Attributes("onblur"= "javascript:blurValue(this,'cbo','cboCJG');"
        txtCBSYR.Attributes("onkeyup"= "javascript:changeValue(this,'normal');"
        txtCBSYR.Attributes("onblur"= "javascript:blurValue(this,'nullmode',80);"