﻿// JScript 文件

// Author:刘国涛
// Version:1.4
// Date  :2008-03-13

// 版本改进：
//     增加了验证日期格式
//     改进了文本框获取焦点时内容全选
//     增加了验证手机号码和IP
//     增加了身份证号码的验证
//     增加了邮编的验证

// 参数说明：
//     obj:接收要验证的Text控件
//     TextProperty:接收要验证Text控件的属性（如：用户名）
//     Eriteria:接收验证格式字符串

// 可验证项目:
//     是否为空
//     1 为普通字符，包括：小写英文字母(1)、大写英文字母(2)、英文字母(3)、英文字母+数字(4)、英文字母+数字+下划线(5)
//     2 为数字，包括：非负整数(1)，正整数(2)，非正整数(3)，负整数(4)，整数(5) 
//               非负浮点数(6)，正浮点数(7)，非正浮点数(8)，负浮点数(9)，浮点数(10) 
//     3 为邮箱 
//     4 为电话(国内,固话小灵通)
//     5 为URL  
//     6 为汉字
//     7 为日期(2004-02-02)
//     8 为手机号、IP  包括：7-11位手机号(1)、11位手机号(2)、IP地址(3)、身份证号码(4)
//     9 为邮编

// 缺陷
// 不能单独验证是否为空

function CheckText(obj,TextProperty,Eriteria)
{
    var f_Eriteria=new Array();
    var f_Eriteria=Eriteria.split(',');

    if (f_Eriteria.length==2)
    {
    
        var j=f_Eriteria[1].substring(0,1);
        
        if (f_Eriteria[0]!='0')
        {
            //验证是否为空
            if (obj.value.length==0)
            {
                alert(TextProperty+'不能为空!');
                obj.focus();
                return false;
            }
            //return true;
        }  
        
        if (obj.value.length!=0)
        {
            if (j!='0')
            {
                switch (j)
                {
                    //1为普通字符，包括：小写字母(1)、大写字母(2)、大小写字母(3)、大小写字母+数字(4)
                    
                    case '1':
                    
                        //得到验证普通字符中的哪种
                        var i=f_Eriteria[1].indexOf(")");
                        var k=f_Eriteria[1].substring(2,i);
                        
                        switch (k)
                        {
                            //验证是否小写字母
                            case '1':
                                var patrn=/^[a-z]+$/;
                                if (!patrn.exec(obj.value))
                                {
                                    alert(TextProperty+'只能为小写英文字母!');
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break;
                            //验证是否大写字母
                            case '2':
                                var patrn=/^[A-Z]+$/;
                                if (!patrn.exec(obj.value))
                                {
                                    alert(TextProperty+'只能为大写英文字母!');
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break;
                            //验证是否大小写字母
                            case '3':
                                var patrn=/^[A-Za-z]+$/;
                                if (!patrn.exec(obj.value))
                                {
                                    alert(TextProperty+'只能为英文字母!');
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break;
                            //验证是否大小写字母+数字
                            case '4':
                                var patrn=/^[A-Za-z0-9]+$/;
                                if (!patrn.exec(obj.value))
                                {
                                    alert(TextProperty+'只能为英文字母和数字!');
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break;
                            //验证是否大小写字母+数字+下划线
                            case '5':
                                var patrn=/^\w+$/;
                                if (!patrn.exec(obj.value))
                                {
                                    alert(TextProperty+'只能为英文字母、数字和下划线!');
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break;
                        }
                        break;
                    //2为数字，包括：非负整数(1)，正整数(2)，非正整数(3)，负整数(4)，整数(5) 
                    //               非负浮点数(6)，正浮点数(7)，非正浮点数(8)，负浮点数(9)，浮点数(10) 
                    case '2':
                    
                        //得到验证数字中的哪种
                        var i=f_Eriteria[1].indexOf(")");
                        var k=f_Eriteria[1].substring(2,i);
                        switch (k)
                        {
                            //验证非负整数
                            case '1':
                                var patrn=/^\d+$/;
                                if (!patrn.exec(obj.value))
                                {
                                    alert(TextProperty+'Пожалуйста, внимательно заполните номера!');
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break;  
                            //验证正整数
                            case '2':
                                var patrn=/^[0-9]*[1-9][0-9]*$/;
                                if (!patrn.exec(obj.value))
                                {
                                    alert(TextProperty+'只能为正整数!');
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break;  
                            //验证非正整数
                            case '3':
                                var patrn=/^((-\d+)|(0+))$/;
                                if (!patrn.exec(obj.value))
                                {
                                    alert(TextProperty+'只能为非正整数!');
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break;  
                            //验证负整数
                            case '4':
                                var patrn=/^-[0-9]*[1-9][0-9]*$/;
                                if (!patrn.exec(obj.value))
                                {
                                    alert(TextProperty+'只能为负整数!');
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break; 
                            //验证整数
                            case '5':
                                var patrn=/^-?\d+$/;
                                if (!patrn.exec(obj.value))
                                {
                                    alert(TextProperty+'只能为整数!');
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break; 
                            //验证非负浮点数
                            case '6':
                                var patrn=/^\d+(\.\d+)?$/;
                                if (!patrn.exec(obj.value))
                                {
                                    alert(TextProperty+'只能为大于等于0的整数和小数!');
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break; 
                            //验证正浮点数
                            case '7':
                                var patrn=/^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/;
                                if (!patrn.exec(obj.value))
                                {
                                    alert(TextProperty+'只能为大于0的整数和小数!');
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break; 
                            //验证非正浮点数
                            case '8':
                                var patrn=/^((-\d+(\.\d+)?)|(0+(\.0+)?))$/;
                                if (!patrn.exec(obj.value))
                                {
                                    alert(TextProperty+'只能为小于等于0的整数和小数!');
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break; 
                            //验证负浮点数
                            case '9':
                                var patrn=/^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/;
                                if (!patrn.exec(obj.value))
                                {
                                    alert(TextProperty+'只能为小于0的整数和小数!');
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break; 
                            //验证浮点数
                            case '10':
                                var patrn=/^(-?\d+)(\.\d+)?$/;
                                if (!patrn.exec(obj.value))
                                {
                                    alert(TextProperty+'只能为整数和小数!');
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break; 
                        }
                        break; 
                    //3为邮箱 
                    case '3':
                        var patrn=/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
                        if (!patrn.exec(obj.value))
                        {
                            alert('Адрес электронной почты неверен!');
                            obj.focus();
                            obj.select();
                            return false;
                        }
                        return true;
                        break;   
                    //4为电话(国内,固话小灵通)
                    case '4':
                        var patrn=/(^[0-9]{3,4}\-[0-9]{7,8}$)|(^[0-9]{7,8}$)|(^\([0-9]{3,4}\)[0-9]{7,8}$)/;   //^\d{3,4}-\d{7,8}$
                        if (!patrn.exec(obj.value))
                        {
                            alert('传真格式不正确!');
                            obj.focus();
                            obj.select();
                            return false;
                        }
                        return true;
                        break;
                    //5为URL  
                    case '5':
                        var regExp=new RegExp("((^http)|(^https)|(^ftp))://(\w)+.(\w)+");
                        var rtn=obj.value.match(regExp);
                        if (rtn==null)
                        { 
                            alert("网址格式不正确"); 
                            obj.focus(); 
                            obj.select();
                            return false;
                        }
                        return true;
                        break;
                    //6为汉字
                    case '6':
                        var patrn=/^[\u4e00-\u9fa5]+$/i; 
                        if (!patrn.exec(obj.value))
                        {
                            alert(TextProperty+'只能为中文汉字!');
                            obj.focus();
                            obj.select();
                            return false;
                        }
                        return true;
                        break;
                    //7为日期
                    case '7':
                        if (!CheckDate(obj.value))
                        {
                            obj.focus();
                            obj.select();
                            return false;
                        }
                        return true;
                        break;
                    //8为手机号、IP
                    case '8':
                        
                        //得到验证手机号码中的哪种
                        var i=f_Eriteria[1].indexOf(")");
                        var k=f_Eriteria[1].substring(2,i);
                        switch (k)
                        {
                            //验证7-11位
                            case '1':
                                if (!checkMobile711(obj.value))
                                {
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break;
                            //验证11位
                            case '2':
                                if (!checkMobile11(obj.value))
                                {
                                    obj.focus();
                                    obj.select();
                                    return false; 
                                }
                                return true;
                                break;
                            //验证IP
                            case '3':
                                if (!checkIP(obj.value))
                                {
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break;
                            //验证身份证
                            case '4':
                                if (checkIdcard(obj.value)!='OK')
                                {
                                    alert(checkIdcard(obj.value));
                                    obj.focus();
                                    obj.select();
                                    return false;
                                }
                                return true;
                                break;
                        }
                        break;
                    //9为邮编
                    case '9':
                        var patrn=/^\d{6}$/;
                        if (!patrn.exec(obj.value))
                        {
                            alert('邮编格式不正确!');
                            obj.focus();
                            obj.select();
                            return false;
                        }
                        return true;
                        break;
                }
            }
        }
        else
        {
            return true;
        }
    }
}

//验证日期主调函数
function CheckDate(strDate)
{
    var reg=/^(\d{4})([-])(\d{2})([-])(\d{2})/;
    if(!reg.test(strDate))
    {
        alert("日期格式不正确!\n正确格式为:2004-01-01");
        return false;
    }
    var ss=strDate.split("-");
    var year=ss[0];
    var month=ss[1];
    var date=ss[2];
    if(!checkYear(year)){return false;}
    if(!checkMonth(month)){return false;}
    if(!checkDate(year,month,date)){return false;}
    return true;
}

function checkYear(year)
{
    if(isNaN(parseInt(year)))
    {
        alert("年份输入有误,请重新输入!"); 
        return false;
    }
    else if(parseInt(year)<1950 || parseInt(year) >2050)
    { 
        alert("年份应该在1950-2050之间!"); 
        return false
    }
    else 
        return true;
}

function checkMonth(month)
{
    if(isNaN(parseInt(month)))
    {
        alert("月份输入有误,请重新输入!"); 
        return false;
    }
    else if(parseInt(month)<1 || parseInt(month) >12)
    { 
        alert("月份应该在1-12之间!"); 
        return false
    }
    else 
        return true;
}

function checkDate(year,month,date)
{
    var daysOfMonth=CalDays(parseInt(year),parseInt(month));
    if(isNaN(parseInt(date)))
    {
        alert("日期输入有误,请重新输入!"); 
        return false;
    }
    else if(parseInt(date)<0||parseInt(date)>daysOfMonth)
    { 
        alert("日期应该在1-"+daysOfMonth+"之间!"); 
        return false;
    }
    else 
        return true;
}

function CalDays(year,month)
{
    var date= new Date(year,month,0);
    return date.getDate();
}

function isLeapYear(year)
{
    if((year %4==0 && year %100!=0) || (year %400==0)) return true;
    else return false;
}

//验证手机号码函数(7-11位)
function checkMobile711(mobile)
{
     var reg0=/^13\d{5,9}$/;   //130--139。至少7位
     var reg1=/^153\d{4,8}$/;  //联通153。至少7位
     var reg2=/^159\d{4,8}$/;  //移动159。至少7位
     var my=false;
     if (reg0.test(mobile))my=true;
     if (reg1.test(mobile))my=true;
     if (reg2.test(mobile))my=true;
     if (!my)
     {
	    alert('手机号码不正确!');
     }
     return my;
}

//验证手机号码函数(11位)
function checkMobile11(mobile)
{
     var reg0=/^13\d{9}$/;   //130--139。至少7位
     var reg1=/^153\d{8}$/;  //联通153。至少7位
     var reg2=/^159\d{8}$/;  //移动159。至少7位
     var my=false;
     if (reg0.test(mobile))my=true;
     if (reg1.test(mobile))my=true;
     if (reg2.test(mobile))my=true;
     if (!my)
     {
	    alert('手机号码不正确!');
     }
     return my;
}

//验证IP函数
function checkIP(obj) 
{ 
    var exp=/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/; 
    var reg = obj.match(exp); 
    if(reg==null) 
    { 
        alert("IP地址不合法！"); 
        return false;
    } 
    return true;
} 

//验证身份证函数
function checkIdcard(idcard){ 
var Errors=new Array( 
"OK", 
"身份证号码位数不对!", 
"身份证号码出生日期超出范围或含有非法字符!", 
"身份证号码校验错误!", 
"身份证地区非法!" 
); 
var area={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}  
var idcard,Y,JYM; 
var S,M; 
var idcard_array = new Array(); 
idcard_array = idcard.split(""); 
//地区检验 
if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4]; 
//身份号码位数及格式检验 
switch(idcard.length){ 
case 15: 
if ( (parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){ 
ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性 
} else { 
ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性 
} 
if(ereg.test(idcard)) return Errors[0]; 
else return Errors[2]; 
break; 
case 18: 
//18位身份号码检测 
//出生日期的合法性检查  
//闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9])) 
//平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8])) 
if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){ 
ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式 
} else { 
ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式 
} 
if(ereg.test(idcard)){//测试出生日期的合法性 
//计算校验位 
S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7 
+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9 
+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 
+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 
+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 
+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 
+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 
+ parseInt(idcard_array[7]) * 1  
+ parseInt(idcard_array[8]) * 6 
+ parseInt(idcard_array[9]) * 3 ; 
Y = S % 11; 
M = "F"; 
JYM = "10X98765432"; 
M = JYM.substr(Y,1);//判断校验位 
if(M == idcard_array[17]) return Errors[0]; //检测ID的校验位 
else return Errors[3]; 
} 
else return Errors[2]; 
break; 
default: 
return Errors[1]; 
break; 
} 
} 



