`
aimilin6688
  • 浏览: 18485 次
  • 性别: Icon_minigender_1
  • 来自: zhengzhou
社区版块
存档分类
最新评论

javascript数据校验正则表达式

阅读更多

var validateUtil = new Object();

validateUtil.isEmpty = function(id) {
    /// <summary>检测元素</summary>    
    /// <param name="id">元素id</param>
    var str = stringUtil.trim($(id).value);
    if (str.length == 0) {
        return true;
    }
    return false;
}

validateUtil.isContainChinese = function(str) {
    /// <summary>检测字符串中是否有汉字</summary>
    var reg = /[\u4e00-\u9fa5]/;
    return reg.test(str);
}

validateUtil.isValidUserName = function(strUserName) {
    /// <summary>检测用户名,长度在6到15位之间,且只能由中英文、数字、-、_构成,
  ///中文算两个字符</summary>
    if (stringUtil.len(strUserName) >= 6 && stringUtil.len(strUserName) <= 15) {
        var reg = /([\u4e00-\u9fa5]|[\w-])/g;
        return reg.test(strUserName);
    }
    return false;
}

validateUtil.isValidPassword = function(strPass) {
    /// <summary>检测密码,密码长度在6到15位之间,且只能由英文字母、数字、-、_构成,
///且首位必须是英文字母</summary>
    var reg = /^[a-zA-Z][\w-]{5,15}$/;
    return reg.test(strPass);
}

validateUtil.isValidEmail = function(strEmail) {
    /// <summary>检测Email地址是否合法</summary>
    var reg = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
    return reg.test(strEmail);
}

validateUtil.isValidDate = function(strDate, separator) {
    /// <summary>检测日期是否合法</summary>
    /// <param name="separator">可选项:年月日之间的分隔符,只可以为'-'或'/',
 默认为'-'</param>
    if (strDate.length == 0) {
        return false;
    }
    //根据正则表达式判断基本的日期格式是否正确:(1|2)xxx-xx-xx
    if (separator == '/') {
        var reg = /^(1|2)([\d]){3}\/[\d]{2}\/[\d]{2}/;
        if (!reg.test(strDate)) {
            return false;
        }
    }
    else {
        var reg = /^(1|2)([\d]){3}-[\d]{2}-[\d]{2}/;
        if (!reg.test(strDate)) {
            return false;
        }
    }
    //去除日期中的 '-' 或 '/' 分隔符
    var strFormatDate = strDate.replace(/(-|\/)/g, '');
    var year, month, day;
    //取得年月份的具体值
    year = isIE ? 
    strFormatDate.substr(0, 4) : strFormatDate.substr(0, 4) + 1900;
    month = strFormatDate.substr(4, 2);
    day = strFormatDate.substr(6, 2);
    //检测年月日的合法性
    return checkDate(year, month, day);
}

validateUtil.isValidCid = function(strId) {
    /// <summary>检测身份证号码是否合法,若为15位则验证成功后返回转换为18位的身份证号,
///若为18位则验证成功后则返回true</summary>
    strId = strId.toUpperCase();
    //判断基本的身份证号码格式是否正确:15位时全为数字,18位前17位为数字,
最后一位是校验位,可能为数字或字符X。   
    if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(strId))) {
        return false;
    }
    //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10
    //下面分别分析出生日期和校验位
    var strIdLength = strId.length;
    var reg;
    var year, month, day;
    if (strIdLength == 15) {
        reg = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
        //如"123456789123456",则arrSplit为123456789123456,123456,78,91,23,456
        var arrSplit = strId.match(reg);

        //检查生日日期是否正确
        var year = '19' + arrSplit[2];
        var month = arrSplit[3];
        var day = arrSplit[4];
        if (!checkDate(year, month, day)) {
            //输入的身份证号里出生日期不对
            return false;
        }
        else {
            //将15位身份证转成18位
            return strId.substr(0, 6) + '19' + strId.substr(6, 9) + 'X';
        }
    }
    if (strIdLength == 18) {
        reg = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
        //如"12345678912345678X",则arrSplit为12345678912345678X,123456,7891,23,
        45,678,X
        var arrSplit = strId.match(reg);

        //检查生日日期是否正确
        var year = '19' + arrSplit[2];
        var month = arrSplit[3];
        var day = arrSplit[4];
        if (!checkDate(year, month, day)) {
            //输入的身份证号里出生日期不对
            return false;
        }
        else {
            //检验18位身份证的校验码是否正确。
            //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
            var validStrId;
            var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 
            8, 4, 2);
            var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4',
             '3', '2');
            var nTemp = 0, i;
            for (i = 0; i < 17; i++) {
                nTemp += strId[i] * arrInt[i];
            }
            validStrId = arrCh[nTemp % 11];
            if (validStrId != strId.substr(17, 1)) {
                //18位身份证的校验码不正确,最后以为应该是+ validStrId);
                return false;
            }
        }
    }
    return true;
}

function checkDate(year, month, day) {
    //月份不可大于12,天数不可大于31
    if (parseInt(month, 10) <= 0 || parseInt(month, 10) > 12 ||
        parseInt(day, 10) <= 0 || parseInt(day, 10) > 31) {
        return false;
    }
    //判断是否是闰年
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
        //闰年2月不可大于29天
        if (parseInt(month, 10) == 2) {
            if (parseInt(day, 10) > 29) {
                return false;
            }
        }
    }
    else {
        //平年2月不可大于28天
        if (parseInt(month, 10) == 2) {
            if (parseInt(day, 10) > 28) {
                return false;
            }
        }
    }
    var monthArr = new Array(1, 3, 5, 7, 8, 10, 12);
    for (var i = 0; i < monthArr.length; i++) {
        //“大月”天数不可大于31
        if (monthArr[i] == parseInt(month, 10)) {
            if (parseInt(day, 10) > 31) {
                return false;
            }
        }
        else {
            //“小月”天数不可大于30
            if (parseInt(day, 10) > 30) {
                return false;
            }
        }
    }
    return true;
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics