﻿//表单验证["ID|类型(或正则表达式、下拉值、后缀名等)|提示",...]
function Validator(aIds)
{
    var aLen = aIds.length;
    
    for(var i=0; i<aLen; i++)
    {
        var aId = aIds[i].split('|');
        
        if(aId[1].toLowerCase()== 'radio')
        {
            var obj = document.getElementsByName(aId[0]);
            if(obj != null)
            {
                if(!checkRadio(obj, aId[2]))
                    return false;
            } 
        }
        else
        {
            var obj = document.getElementById(aId[0]);
            
            if(obj != null)
            {
                //获取控件类型
                var aType = obj.tagName.toLowerCase();
                if(aType == "input")
                    aType = obj.type.toLowerCase();
                
                switch(aType)
                {
                    case "text":
                        if(!checkTextBox(obj, aId[1], aId[2]))
                            return false;
                            break;
                    case "textarea":
                        if(!checkTextBox(obj, aId[1], aId[2]))
                            return false;     
                        break;
                    case "password":
                        if(!checkTextBox(obj, aId[1], aId[2]))
                            return false;     
                        break;
                    case "select":
                        if(!checkDropDownList(obj, aId[1], aId[2]))
                            return false;
                        break;
                   case "file":
                        if(!checkFileUpload(obj, aId[1], aId[2]))
                            return false;
                        break;   
                   default:
                        break;
                }
            }
        }
    }
    
    return true;
}
//文本框

function checkTextBox(obj, type, message)
{
    var str1, str2 = message;
    
    switch(type.toLowerCase())
    {
        case "number":
            str1 = /^\d+$/;
            if(message == "")
               str2 = "请输入数字！";
            break;
        case "decimal":
            str1 = /^[-\+]?\d+(\.\d+)?$/; 
            if(message == "")
               str2 = "请输入数字！";
            break;
        case "int":
            str1 = /^[-\+]?\d+$/;
            if(message == "")
               str2 = "请输入整数！";
            break;    
        case "email":
            str1 = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
            if(message == "")
                str2 = "请输入正确的邮件帐号！";
            break;
		case "english": 
			str1 = /^[A-Za-z]+$/;
			if(message = "")
				str2 = "请输入英文字符，不包含数字、下划线！";
			break;
        case "postcode":
            str1 = /^[1-9]\d{5}$/;
            if(message == "")
                str2 = "请输入正确的邮政编码！";
            break;
        case "tel":
            str1 = /^([0-9]{2,4}\-)?([0-9]{2,3}\-)?([2-9][0-9]{6,7})+(\-[0-9]{1,4})?$/;
            //str1= /^(([0\+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/;
            if(message == "")
                str2 = "请输入正确的邮政编码！";
            break;
        case "tel_":
            str1 = ""; //要设置为空,下面不做判断
            if(obj.value != "")
            {
                str1 = /^([0-9]{2,4}\-)?([0-9]{2,3}\-)?([2-9][0-9]{6,7})+(\-[0-9]{1,4})?$/;
                //str1= /^(([0\+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/;
                if(message == "")
                    str2 = "请输入正确的手机号码！";
            }
            break;
        case "mobile":
            str1 = /^((\(\d{3}\))|(\d{3}\-))?13\d{9}|15[89]\d{8}$/;
            if(message == "")
                str2 = "请输入正确的邮政编码！";
            break;  
        case "mobile_":
            str1 = ""; //要设置为空,下面不做判断
            if(obj.value != "")
            {
                str1 = /^((\(\d{3}\))|(\d{3}\-))?13\d{9}|15[89]\d{8}$/;
                if(message == "")
                    str2 = "请输入正确的手机号码！";
            }   
            break;       
        case "username":
              str1 = ""; //要设置为空,下面不做判断
              if(message == "")
                str2 = "帐号格式不正确，必须由5至20个字母、数字、下划线或中横杠组成！";
                
             //var strnew = /^[\u4e00-\u9fa5a-zA-Z0-9_-]{5,20}$/;
             var strnew = /^[\u4e00-\u9fa5a-zA-Z0-9_-]*$/;
             if(obj.value.search(strnew) == -1)
             {
                alert(str2);
                obj.select();
                return false;
             }
             else
             {
                var repstr = obj.value.replace(new RegExp("[\u4e00-\u9fa5]","g"),"11"); //替换后的字符
                if(repstr.length < 5 || repstr.length > 20)
                {
                    alert(str2);
                    obj.select();
                    return false;
                }
                
             }
             
            break;
        case "password":
            str1 = /^[a-zA-Z0-9_]{6,20}$/;
            if(message == "")
                str2 = "密码格式不正确，必须由6至20个字母、数字或下划线组成！";
            break;
        case "username_":
            str1 = /^[a-zA-Z0-9_-]{4,40}$/;
            if(message == "")
                str2 = "帐号格式不正确，必须由4至40个字母、数字、下划线或中横杠组成！";
            break;
        case "password_":
            str1 = /^[a-zA-Z0-9_]{4,20}$/;
            if(message == "")
                str2 = "密码格式不正确，必须由4至20个字母、数字或下划线组成！";
            break;
        case "website":
            str1 = /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;
            if(message == "")
                str2 = "请输入正确的网址！";
            break;
        case "ip":
            str1 = /\d+\.\d+\.\d+\.\d+/;
            if(message == "")
                str2 = "请输入正确的IP地址！";
            break;
        case "require": 
                str1 = ""; //要设置为空,下面不做判断
                if(obj.value == "")
                {
                    alert(str2);
                    obj.focus();
                    return false;
                }
            break; 
        case "nonull": 
                
                str1 = ""; //要设置为空,下面不做判断
                if(obj.value.replace(" ", "") == "")
                {
                    alert(str2);
                    obj.select();
                    return false;
                }
            break;
        case "datetime": 
                str1 = ""; //要设置为空,下面不做判断
                if(!obj.value.IsDate())
                {
                    alert(str2);
                    obj.select();
                    return false;
                }
            break; 
        case "idcard": 
                str1 = ""; //要设置为空,下面不做判断
                var isIDCard="";
                if(obj.value != "")
                {
                    if(obj.value.length == 15)
                    {
                        isIDCard= /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;     
                            
                        if(obj.value.search(isIDCard) == -1)
                        {
                            alert(str2);
                            obj.select();
                            return false;
                        }
                    }
                    else if(obj.value.length == 18)
                    {
                       
                    
                       isIDCard=/^(\d{6})(18|19|20)?(\d{2})([01]\d)([0123]\d)(\d{3})(\d|X)?$/;
                        
                        if(obj.value.search(isIDCard) == -1)
                        {
                            alert(str2);
                            obj.select();
                            return false;
                        }
                    }
                    else
                    {
                        alert(str2);
                        obj.select();
                        return false;
                    }
                }
            break;          
        default:
            str1 = new RegExp(type, "g");    //自定义的正则表达式

            if(message == "")
                str2 = "请输入正确格式！";
           break;
    }
    
    
    if(str1 != "")
    {
        //alert(str1);
        if(obj.value.search(str1) == -1&&obj.value!="")
        {
            alert(str2);
            obj.select();
            return false;
        }
    }
    
    return true;
}
//下拉列表
function checkDropDownList(obj, type, message)
{
    if(obj.value == type)
    {
        var str = message;
        if(message == "")
            str = "请选择！";
        
        alert(str);
        obj.focus();
        return;
    }
    return true;
}

//单先框
function checkRadio(obj, message)
{
    var str = message;
    if(message == "")
        str = "至少选择一项！";
    
    var flag = false;
    for(var i = 0;i<obj.length;i++)
    {
        if(obj[i].checked)
        {
           flag = true;
           break;
        }
    }
    
    if(!flag)
    {
        alert(str);
        obj[0].focus();
        return false;
    }
    return true;
}

//上传文件
//格式:gif*jpg 不加:号则表示可为空
function checkFileUpload(obj, type, message)
{
    var str = message;
    if(message == "")
        str = "请上传文件！";
        
    if(type == "")
    {
        if(obj.value == "")
        {
            alert(str);
            obj.focus();
            return false;
        }
    }
    else
    {
        type = type.replace('*', '|');
        //判断是否允许不上传
        if(type.indexOf(':') == -1)
        {
             if(obj.value == "")
             {
                 return true;
             }
        }
        else
        {
            if(obj.value == "")
             {
                alert(str);
                obj.focus();
                return false
             }
        }
        type = type.replace(':', '');
        var strFilter= type.toLowerCase(); //允许上传的图片格式
        var p = obj.value.lastIndexOf("."); //获取上传图片的后缀
        var strPostfix=obj.value.substring(p+1,obj.value.length);        
            strPostfix = strPostfix.toLowerCase();
        //alert(strPostfix);
        //alert(strFilter.indexOf(strPostfix));
        if(strFilter.indexOf(strPostfix) < 0)
        {
            alert(str);
            obj.focus();
            return false;
        }
        
    }
    return true;
}


//****************************************************************    
//* 名　　称：DataLength   
//* 功    能：计算数据的长度   
//* 入口参数：fData：需要计算的数据   
//* 出口参数：返回fData的长度(Unicode长度为2，非Unicode长度为1)
//*****************************************************************   
function DataLength(fData)   
{   
    var intLength=0   
    for (var i=0;i<fData.length;i++)   
    {   
        if ((fData.charCodeAt(i) < 0) || (fData.charCodeAt(i) > 255))   
            intLength=intLength+2   
        else  
            intLength=intLength+1       
    }   
    return intLength   
}

//日期
String.prototype.IsDate=function()
{
 var str=this;
    var reg =/^(\d+)-(\d{1,2})-(\d{1,2})$/;    
    var r=str.match(reg);    
    if(r==null)return false;    
    r[2]=r[2]-1;    
    var d=new Date(r[1],r[2],r[3]);    
    if(d.getFullYear()!=r[1])return false;    
    if(d.getMonth()!=r[2])return false;    
    if(d.getDate()!=r[3])return false;    
    return true;  
}
