前端正则表达式校验邮箱,电话,身份证等



//邮箱
var mail = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
//手机
var phone = /^1[23456789]\d{9}$/;
//固定电话
var gphone = /^([0-9]{3,4}-)?[0-9]{7,8}$/;
//定位后背景色
var bgclr = "#e0f2be";
//输入内容为小数位不超过2位的数值
 var decimal= /^(([1-9][0-9]*)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/;

/**
 * 验证器,验证输入的是否符合制定的规则(调用示例:if(validator("form_vo")){xxx})
 * 要验证的组件上需加入标签:validator,其中validator的值是一个json字符串格式,如:<input validator='{"msg":"请选择户主"}'>
 * 扩展有:validator='{"msg":"请输入正确的格式", "min":"6", "max":"20", "num":"true", "rule":"idCard"}'
 * msg:校验输入的值是否为空,为空则弹出提示
 * min:输入长度不允许小于该值,小于则弹出提示,该值必须是数字
 * max:输入的长度不允许超过该值,超过则弹出提示,该值必须是数字
 * num:该值若有值则校验输入的值必须是number类型,否则弹出提示
 * rule:包含四个值[idCard:校验输入的值是否是身份证号码;phone:校验输入的值是否是手机号码;mail:校验输入的值是否是邮箱;gphone:固定电话校验]
 * @param upperDomId 要验证的值的上层组件id
 * @return {boolean} true则验证通过,false验证失败
 */
function validator(upperDomId) {
    var booleanFlag = true;
    $.each($("#" + upperDomId).find("[validator]"), function (k, v) {
        var $this = $(this);
        $this.css("background-color", "");
        var validate = $this.attr("validator");
        if (validate == null) {
            return booleanFlag;
        }
        var validatorVal = JSON.parse(validate.toString());
        if (validatorVal == null) {
            return booleanFlag;
        }
        //必填
        var domVal = $this.val();
        if (!isEmpty(validatorVal.msg)) {//必填
            if (isEmpty(domVal)) {
                alertMsg(validatorVal.msg);
                $this.focus();
                $this.css("background-color", bgclr);
                booleanFlag = false;
                return booleanFlag;
            }
        }
        //规则
        var vRule = validatorVal.rule;
        if (!isEmpty(validatorVal.rule)) {
            if (vRule == "idCard") {
                var flag = isCardID(domVal);
                if (flag != true) {
                    alertMsg(flag);
                    $this.focus();
                    $this.css("background-color", bgclr);
                    booleanFlag = false;
                    return booleanFlag;
                }
            } else if (vRule == "phone") {
                if (!phone.test(domVal)) {//手机
                    alertMsg("手机号码格式不对");
                    $this.focus();
                    $this.css("background-color", bgclr);
                    booleanFlag = false;
                    return booleanFlag;
                }
            } else if (vRule == "mail") {
                if (!mail.test(domVal)) {//邮箱
                    alertMsg("邮箱格式不正确");
                    $this.focus();
                    $this.css("background-color", bgclr);
                    booleanFlag = false;
                    return booleanFlag;
                }
            } else if (vRule == "gphone") {
                if (!gphone.test(domVal)) {//固定电话
                    alertMsg("固定电话格式不对");
                    $this.focus();
                    $this.css("background-color", bgclr);
                    booleanFlag = false;
                    return booleanFlag;
                }
            }
            else if (vRule == "decimal") {
                if (isNaN(domVal)) {
                    alertMsg("请输入正确的数字!");
                    $this.focus();
                    $this.css("background-color", bgclr);
                    booleanFlag = false;
                    return booleanFlag;
                }
                if(domVal<0){
                    alertMsg("不能输入负数!");
                    $this.focus();
                    $this.css("background-color", bgclr);
                    booleanFlag = false;
                    return booleanFlag;
                }
                if (!decimal.test(domVal)) {
                    alertMsg("小数位不能超过2位的数值");
                    $this.focus();
                    $this.css("background-color", bgclr);
                    booleanFlag = false;
                    return booleanFlag;
                }
            }

        }
        //长度
        var vMax = validatorVal.max;
        if (vMax != null) {
            if (domVal.length > parseInt(vMax)) {
                alertMsg("输入的长度不允许超过" + vMax);
                $this.focus();
                $this.css("background-color", bgclr);
                booleanFlag = false;
                return booleanFlag;
            }
        }
        var vMin = validatorVal.min;
        if (vMin != null) {
            if (domVal.length < parseInt(vMin)) {
                alertMsg("输入的长度不允许小于" + vMin);
                $this.focus();
                $this.css("background-color", bgclr);
                booleanFlag = false;
                return booleanFlag;
            }
        }


        var vVal = validatorVal.vVal;
        if (vVal != null) {
            if (parseInt(domVal) > parseInt(vVal)) {
                alertMsg("输入的值不允许大于" + vVal);
                $this.focus();
                $this.css("background-color", bgclr);
                booleanFlag = false;
                return booleanFlag;
            }
        }

        //必需为数字
        if (validatorVal.num != null) {
            if (!isEmpty(domVal)) {
                if (isNaN(parseInt(domVal))) {
                    alertMsg("请输入正确的数字!");
                    $this.focus();
                    $this.css("background-color", bgclr);
                    booleanFlag = false;
                    return booleanFlag;
                }
            }
        }

    });
    return booleanFlag;
}

//身份证号码中的城市数字代码
var aCity={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:"国外"}

/**
 * 判断是否为正确的身份证号码
 * @param sId 要校验的身份证号码
 * @return {*} true是,其它为错误信息
 */
function isCardID(sId) {
    var iSum = 0;
    var info = "";
    if (!/^\d{17}(\d|x)$/i.test(sId)) return "你输入的身份证长度或格式错误";
    sId = sId.replace(/x$/i, "a");
    if (aCity[parseInt(sId.substr(0, 2))] == null) return "你的身份证地区非法";
    var sBirthday = sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2));
    var d = new Date(sBirthday.replace(/-/g, "/"));
    if (sBirthday != (d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate())) return "身份证上的出生日期非法";
    for (var i = 17; i >= 0; i--) iSum += (Math.pow(2, i) % 11) * parseInt(sId.charAt(17 - i), 11);
    if (iSum % 11 != 1) return "你输入的身份证号非法";
    return true;//aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女")
}

/**
 * 解析身份证号码,获取出生年月(obj.birthday)、年龄(obj.age)、性别(obj.sex)
 * @param  {String} certificateNo [身份证号码]
 * @return {Object}               [解析后的对象]
 */
function certificateNoParse(certificateNo) {
    if(!isNotBlank(certificateNo)){
        return null;
    }
    if(isCardID(certificateNo) != true){
        return null;
    }

    var parseInner = function(certificateNo, idxSexStart, birthYearSpan){
        var res = {};
        var idxSex = 1 - certificateNo.substr(idxSexStart, 1) % 2;
        res.sex = idxSex == '1' ? '2' : '1';    //1男 2女

        var year = (birthYearSpan == 2 ? '19' : '') +
            certificateNo.substr(6, birthYearSpan);
        var month = certificateNo.substr(6 + birthYearSpan, 2);
        var day = certificateNo.substr(8 + birthYearSpan, 2);
        res.birthday = year + '-' + month + '-' + day;
        var d = new Date(); //这里应该获取服务器的当前时间
        var monthFloor = ((d.getMonth()+1) < parseInt(month,10) || (d.getMonth()+1) == parseInt(month,10) && d.getDate() < parseInt(day,10)) ? 1 : 0;
        res.age = d.getFullYear() - parseInt(year,10) - monthFloor;
        return res;
    };
    return parseInner(certificateNo, certificateNo.length == 15 ? 14 : 16, certificateNo.length == 15 ? 2 : 4);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值