码迷,mamicode.com
首页 > 其他好文 > 详细

常用正则表达式

时间:2014-12-11 13:54:47      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   os   sp   for   on   

/*
Author:xieqiaoyun@oneplus.cn
Date:2013-12-24
*/
;(function(win,doc,$){
    var log = function(){
        try{
            console.log.apply(console,arguments);
        }catch(e){
            try{
                opera.postErrors.apply(opera,arguments);
            }catch(e){
                return false;
                // alert(Array.prototype.join.call(arguments," "));
            }
        }
    };
    function getIdCardInfo(idcard){
        var sigma = 0;
        var a = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 );
        var w = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2");
        for(var i = 0; i < 17; i++) {
            var ai = parseInt(idcard.substring(i, i + 1));
            var wi = a[i];
            sigma += ai * wi;
        }
        var number = sigma % 11;
        return idcard.substring(0,17)+w[number];
    }
    function idCard15To18(id){
        var W = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);
        var A = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2");
        var i,j,s=0;
        var newid;
        newid = id;
        newid = newid.substring(0,6)+"19"+newid.substring(6,id.length);
        for(i=0;i<newid.length;i++ ){
            j= parseInt(newid.substring(i,i+1))*W[i];
            s=s+j;
        }
        s = s % 11;
        newid=newid+A[s];
        return newid;
    }
    var FormValidate=function(options){
        log("FormValidate");
        this.o=$.extend(true,{},this.defaults,options);
        var inputs = !!this.o.formID?$(this.o.formID).find("[rules]"):$("[rules]"),elems=[];
        inputs.each(function(e){
            if($(this).attr("rules")!=""){
                elems.push({"type":$(this).attr("rules"),"node":this.id,"val":this.value});
            }
        });
        this.doinit(elems);
        log("elems length:"+elems.length);
    }
    
    FormValidate.prototype={
        defaults:{
            rules:{
                "idcard":"idcard",
                "number":"number",
                "numberAndEnglish":"numberAndEnglish",
                "english":"english",
                "chinese":"chinese",
                "mobilePhone":"mobilePhone",
                "areaCode":"areaCode",
                "phoneNumber":"phoneNumber",
                "tel":"tel",
                "email":"email",
                "postCode":"postCode",
                "validCode":"validCode",
                "password":"password",
                "password2":"password2",
                "range":"range",
                "min":"min",
                "max":"max",
                "mobilePhoneAndEmail":"mobilePhoneAndEmail"/*,
                "defaults":"defaults"*/
            },
            regx:{
                "number":/^[+-]?\d+(\.\d+)?$/,
                "numberAndEnglish":/^[A-Za-z0-9]+$/,
                "english":/^[A-Za-z_]+$/,
                "chinese":/^[\u4e00-\u9fa5]+$/,
                "mobilePhone":/^1[3|4|5|8]\d{9}$/,
                "areaCode":/^0\d{2,3}$/,
                "phoneNumber":/\d{7,8}$/,
                "tel":/^1[3|4|5|8]\d{9}$|^(0\d{2,3}-?|\(0\d{2,3}\))?[1-9]\d{4,7}(-\d{1,8})?$/,
                "email":/^[\w.-]+@\w+(\.\w+)?\.\w{2,3}/gi,
                "postCode":/^[1-9]\d{5}$/,
                "validCode":/\d{6}/,
                "password":/((?=.*[A-Za-z~!@#$%^&*()-+=|{}<>\?])(?=.*\d)|(?=.*\d)(?=.*A-Za-z~!@#$%^&*()-+=|{}<>\?))[\w\~!@#$%\^&\*\(\)-+=|<>\?]{8,16}/
            },
            errmsg:{
                "nonEmpty":"必填项",
                "empty":"",
                "idcard":"身份证号码有误",
                "number":"请输入数字",
                "numberAndEnglish":"请输入数字或字母",
                "english":"请输入英文字母或下划线",
                "chinese":"请输入中文字符",
                "mobilePhone":"请输入正确的手机号码",
                "areaCode":"请输入正确的区号",
                "phoneNumber":"请输入正确的电话号码",
                "tel":"请输入正确的电话号码",
                "email":"请输入正确的Email地址",
                "postCode":"请输入正确的邮政编码",
                "validCode":"请输入正确的验证码",
                "password":"密码必须是8-16位英文字母和数字的组合",
                "password2":"两次输入的密码不一致",
                "range":"字符长度不在区间内",
                "charMin":"字符长度超出限制",
                "charMax":"字符长度必须大于设定值",
                "mobilePhoneAndEmail":"请输入手机号码或电子邮箱地址",
                "defaults":"验证错误"
            },
            urls:{
            },
            success:{"valid":true,"msg":"验证通过"}
        },
        errors:{},
        doinit:function(elems){
            log("init validator...");
            var _parent = this;
            if(elems.length>0){
                for(var k in elems){
                    (function(k,elem){ 
                        $("#"+elem["node"]).bind("blur",function(){
                            _parent.validate.call(_parent,elem,k);
                        });
                    })(k,elems[k]);
                }
            }
        },
        validate:function(elem,k){
            if(!elem["type"]){
                return {"valid":false,"msg":"验证错误"};
            }
            var patterns = elem["type"].split(","),i=0,l=patterns.length;
            this.doValid(patterns,elem,i,l,k);
        },
        doValid:function(type,elem,i,l,k){
            var errs;
            if(i<l && typeof(this[type[i]])=="function"){
                if(this[type[i]](elem)){
                    errs=this.errors[type[i]+"_"+k]=this.o.success;
                    this.showErrorTip(errs["valid"],elem["node"],errs["msg"]);
                    if(type[i]!="empty"){
                        i++;
                        this.doValid.call(this,type,elem,i,l,k);
                    }else{
                        this.resetMsg(type,i,k);
                    }
                }else{
                    if(type[i]=="empty"){
                        errs=this.errors[type[i]+"_"+k]=this.o.success;
                        this.showErrorTip(errs["valid"],elem["node"],errs["msg"]);
                        i++;
                        this.doValid.call(this,type,elem,i,l,k);
                    }else{
                        errs=this.errors[type[i]+"_"+k]={"valid":false,"msg":this.o.errmsg[type[i]]};
                        this.showErrorTip(errs["valid"],elem["node"],errs["msg"]);
                    }
                }
            }
        },
        resetMsg:function(type,i,k){
            var rules;
            if(type.length>i){
                for(var j=i+1;j<type.length;j++){
                    delete this.errors[type[j]+"_"+k];
                }
            }
        },
        isValid:function(){
            var isvalid=true;
            for(var i in this.errors){
                if(!this.errors[i]["valid"]){
                    isvalid=this.errors[i]["valid"];
                    break;
                }
            }
            return isvalid;
        },
        blur:function(){
            var elems=!!this.o.formID?$(this.o.formID).find("[rules]:visible"):$("[rules]:visible"),rules,errs;
            for(var i=0;i< elems.length;i++){
                rules=$(elems[i]).attr("rules").split(",");
                for(var k in rules){
                    // if(!this.errors[rules[k]]){
                        $(elems[i]).blur();
                    // }
                }
            }
        },
        isEmpty:function(obj){
            for(var name in obj){
                return false;
            }
            return true;
        },
        showErrorTip:function(valid,elem,msg){
            
            var _elm = $("#"+elem);
            if(valid){
                if(!!this.o.tipbox){
                    $(this.o.tipbox).find(".vt_"+elem).html("").hide();
                }else{
                    _elm.parent().find(".validate_tip").html("").hide();
                }
                _elm.removeClass("validate_br");
            }else{
                if(!!this.o.tipbox){
                    if($(this.o.tipbox).find(".vt_"+elem).length==0){
                        $(this.o.tipbox).append("<em class=\"validate_tip vt_"+elem+"\">"+msg+"</em>").show();
                        
                        
                    }else{
                        $(this.o.tipbox).find(".vt_"+elem).html(msg).show();
                    }
                }else{
                    if(_elm.parent().find(".validate_tip").length==0){
                        
                        _elm.parent().find(".validate_tip").blur();
                        
                        _elm.parent().append("<em class=\"validate_tip\">"+msg+"</em>").show();
                        
                    }else{
                        _elm.parent().find(".validate_tip").html(msg).show();
                    }
                }
                _elm.addClass("validate_br");
            }
        },
        
        // 身份证号码
        idcard:function(elem){
            elem["val"] = $.trim($("#"+elem["node"]).val());
            if(elem["val"].length==18){
                return getIdCardInfo(elem["val"])==elem["val"];
            }else if(elem["val"].length==15){
                var id18=idCard15To18(elem["val"]);
                return getIdCardInfo(id18)==elem["val"];
            }else{
                return false;
            }
        },
        
        // 数字
        number:function(elem){
            elem["val"] = $.trim($("#"+elem["node"]).val());
            return new RegExp(this.o.regx["number"]).test(elem["val"]);
        },
        
        // 数字或字母或数字字母的组合
        numberAndEnglish:function(elem){
            elem["val"] = $.trim($("#"+elem["node"]).val());
            return new RegExp(this.o.regx["numberAndEnglish"]).test(elem["val"]);
        },

        // 英文字符
        english:function(elem){
            elem["val"] = $.trim($("#"+elem["node"]).val());
            return new RegExp(this.o.regx["english"]).test(elem["val"]);
        },
        
        // 中文字符
        chinese:function(elem){
            elem["val"] =  $.trim($("#"+elem["node"]).val());
            return new RegExp(this.o.regx["chinese"]).test(elem["val"]);
        },
        
        // 手机号码
        mobilePhone:function(elem){
            elem["val"] = $.trim($("#"+elem["node"]).val());
            return new RegExp(this.o.regx["mobilePhone"]).test(elem["val"]);
        },
        
        // 区号
        areaCode:function(elem){
            elem["val"] = $.trim($("#"+elem["node"]).val());
            return new RegExp(this.o.regx["areaCode"]).test(elem["val"]);
        },

        // 电话号码
        phoneNumber:function(elem){
            elem["val"] = $.trim($("#"+elem["node"]).val());
            return new RegExp(this.o.regx["phoneNumber"]).test(elem["val"]);
        },
        
        // 电话号码(020123456、020-123456、0755123456、0755-123456、755-123456-1234)
        tel:function(elem){
            elem["val"] = $.trim($("#"+elem["node"]).val());
            return new RegExp(this.o.regx["tel"]).test(elem["val"]);
        },
        
        // 电子邮箱地址,\w 英文字母、数字、下划线
        email:function(elem){
            elem["val"] = $.trim($("#"+elem["node"]).val());
            return new RegExp(this.o.regx["email"]).test(elem["val"]);
        },
        
        // 邮政编码
        postCode:function(elem){
            elem["val"] = $.trim($("#"+elem["node"]).val());
            return new RegExp(this.o.regx["postCode"]).test(elem["val"]);
        },
        
        // 验证码
        validCode:function(elem){
            elem["val"] = $.trim($("#"+elem["node"]).val());
            return new RegExp(this.o.regx["validCode"]).test(elem["val"]);
        },
        
        // 密码,必须包含字母和数字
        password:function(elem){
            elem["val"] = $.trim($("#"+elem["node"]).val());
            if(!new RegExp(this.o.regx["password"]).test(elem["val"])){
                return false;
            }else{
                if($("#"+$("#"+elem["node"]).attr("refId")).length!=0){
                    $("#"+$("#"+elem["node"]).attr("refId")).blur();
                }
                return true;
            }
        },
        password2:function(elem){
            elem["val"] = $("#"+elem["node"]).val();
            var pwd = $("#"+$("#"+elem["node"]).attr("refId")).val();
            return pwd==elem["val"];
        },
        
        // 手机号码或电子邮箱
        mobilePhoneAndEmail:function(elem){
            // var rules = elem["type"].split(",");
            elem["val"] = $.trim($("#"+elem["node"]).val());
            if(this.mobilePhone(elem)){
                return true;
            }else{
                if(this.email(elem)){
                    return true;
                }else{
                    return false;
                }
            }
        },
        // 字符长度限制
        range:function(elem){
            elem["val"] = $.trim($("#"+elem["node"]).val());
            var len = elem["val"].match(/[^ -~]/g)==null?elem["val"].length/2:(elem["val"].length-elem["val"].match(/[^ -~]/g).length)/2+elem["val"].match(/[^ -~]/g).length;
            return len >= parseInt($("#"+elem["node"]).attr("min")) && len <= parseInt($("#"+elem["node"]).attr("max"));
        },
        // 至少
        charMin:function(elem){
            elem["val"] = $.trim($("#"+elem["node"]).val());
            var len = elem["val"].match(/[^ -~]/g)==null?elem["val"].length:elem["val"].length+elem["val"].match(/[^ -~]/g).length;
            return len >= parseInt($("#"+elem["node"]).attr("min"));
        },
        // 最多
        charMax:function(elem){
            elem["val"] = $.trim($("#"+elem["node"]).val());
            var len = elem["val"].match(/[^ -~]/g)==null?elem["val"].length:elem["val"].length+elem["val"].match(/[^ -~]/g).length;
            return len <= parseInt($("#"+elem["node"]).attr("max"));
        },
        // 非空
        nonEmpty:function(elem){
            elem["val"] = $("#"+elem["node"]).val();
            return elem["val"].trim() != "";
        },
        // 
        empty:function(elem){
            elem["val"] = $("#"+elem["node"]).val();
            return elem["val"].trim() == "";
        }
    };
    win.FormValidate = FormValidate;
})(window,document,jQuery);

 

常用正则表达式

标签:style   blog   io   ar   color   os   sp   for   on   

原文地址:http://www.cnblogs.com/snowbaby-kang/p/4157369.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!