Validator

来源:互联网 发布:台湾天心软件集团 编辑:程序博客网 时间:2024/05/21 07:46

//var dom = YAHOO.util.Dom ;
 
var attributes = {
    color: {from:'#fff',to: '#fff'},
    backgroundColor: { from:'#fff',to: '#e06' }
};


ValidatorClass = function()
{
    this.Validator = Validator;
};


Validator = {
    Require: /.+/,
    Email1: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
    Email: /^\w+([-_.]\w+)*@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\.)+[a-zA-Z]{2,}$/,
    Phone: /^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/,
    Mobile: /^((\(\d{3}\))|(\d{3}\-))?1(3|5|8){1}\d{9}$/,
    Url: /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,
    IdCard: /^\d{15}(\d{2}[A-Za-z0-9])?$/,
    Currency: /^\d+(\.\d+)?$/,
    Number: /^\d+$/,
    Zip: /^[0-9]\d{5}$/,
    QQ: /^[1-9]\d{4,8}$/,
    Integer: /^[-\+]?\d+$/,
    Double: /^[-\+]?\d+(\.\d+)?$/,
    English: /^[A-Za-z0-9-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]+$/,
    Chinese: /^[\u0391-\uFFE5]+$/,
    NotOnlyNumber: "this.checkNotOnlyNumbermsg(value)",
    UserName1: /^(([0-9]*)[A-Za-z_\u0391-\uFFE5]+([0-9]*))|(([A-Za-z_\u0391-\uFFE5]+)[0-9]+([A-Za-z_\u0391-\uFFE5]+))$/,
    UserName: /^[A-Za-z_0-9\u4E00-\u9FA5]+$/,
    UnSafe: /^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/,
    Blank: /^[^\s]+$/,
    SpecialChar: /^[^\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"!@#¥%&×+-——……]+$/,
    NotNumber: /^[^\d]/,
    NotSpecialChar: /^[^-_]/,
    OnlyEnglish: /^[A-Za-z0-9]+$/,
    IsSafe: function (str) { return !this.UnSafe.test(str); },
    SafeString: "this.IsSafe(value)",
    Limit: "this.limit(value.length,getAttribute('min'),  getAttribute('max'))",
    LimitB: "this.limit(this.LenB(value), getAttribute('min'), getAttribute('max'))",
    Date: "this.IsDate(value, getAttribute('min'), getAttribute('format'))",
    Repeat: "value == document.getElementsByName(getAttribute('to'))[0].value",
    Range: "getAttribute('min') < value && value < getAttribute('max')",
    Compare: "this.compare(value,getAttribute('operator'),getAttribute('to'))",
    Custom: "this.Exec(value, getAttribute('regexp'))",
    Group: "this.MustChecked(getAttribute('name'), getAttribute('min'), getAttribute('max'))",
    ErrorItem: [document.forms[0]],
    ErrorMessage: ["以下原因导致提交失败\t\t\t\t"],
    IfError: [],
    CurrentObj: [],
    IsSlef: [],
    ErrClass: "rp2",
    SuccClass: "rp1",
    Mode: "",
    Validate: function (theForm, mode, isSlef, errMsg, dataType) {


        var obj = theForm || event.srcElement;
        this.CurrentObj = obj;
        this.IsSlef = isSlef;
        var count = isSlef ? 1 : obj.elements.length;
        this.ErrorMessage.length = 1;
        this.ErrorItem.length = 1;
        this.ErrorItem[0] = obj;
        this.Mode = mode;
        for (var i = 0; i < count; i++) {
            var eleObj = isSlef ? obj : obj.elements[i];
            with (eleObj) {
                var _dataType = (typeof (dataType) == "undefined") ? getAttribute("dataType") : dataType;
                if (typeof (this[_dataType]) == "undefined" && mode == 1) continue;
                this.ClearState(eleObj);
                if (getAttribute("require") == "false" && value == "") continue;
                var _dataTypeArr = _dataType.split(',');
                for (var j = 0; j < _dataTypeArr.length; j++) {


                    var iferr = false;
                    switch (_dataTypeArr[j]) {
                        case "Date":
                        case "Repeat":
                        case "Range":
                        case "Compare":
                        case "Custom":
                        case "Group":
                        case "Limit":
                        case "LimitB":
                        case "SafeString":
                        case "NotOnlyNumber":
                            if (!eval(this[_dataTypeArr[j]])) {
                                this.AddError(i, (typeof (errMsg) == "undefined") ? getAttribute(_dataTypeArr[j] + "msg") : errMsg);
                                iferr = true;
                            }
                            break;
                        default:
                            if (!this[_dataTypeArr[j]].test(value)) {
                                this.AddError(i, (typeof (errMsg) == "undefined") ? getAttribute(_dataTypeArr[j] + "msg") : errMsg);
                                iferr = true;
                            }
                            break;
                    }


                    if (iferr) break;
                }
            }
        }
        if (this.ErrorMessage.length > 1) {
            mode = mode || 1;
            var errCount = this.ErrorItem.length;


            switch (mode) {
                case 0:
                    break;
                case 2:
                    for (var i = 1; i < errCount; i++) {
                        //this.ErrorItem[i].style.color = "red";
                        validationAware.AddError(this.ErrorMessage[i].replace(/\d+:/, ""), true);
                        //alert(this.ErrorMessage[i].replace(/\d+:/,""));
                        break;
                    }
                    break;
                case 1:
                    alert(this.ErrorMessage.join("\n"));
                    this.ErrorItem[1].focus();
                    break;
                case 3:
                    for (var i = 1; i < errCount; i++) {
                        //try{


                        var errCon = document.getElementById(this.ErrorItem[i].id + "Tip");


                        if (typeof (errCon) != "undefined") {
                            //var anim = new YAHOO.util.ColorAnim(errCon.id, attributes);
                            errCon.className = this.ErrClass;
                            errCon.innerHTML = this.ErrorMessage[i].replace(/\d+:/, "");
                            //anim.animate();
                        } else {


                            var span = document.createElement("SPAN");
                            span.id = "__ErrorMessagePanel" + i;
                            span.className = "y23";
                            this.ErrorItem[i].parentNode.appendChild(span);
                            span.innerHTML = this.ErrorMessage[i].replace(/\d+:/, "");
                            //var x = dom.getX(this.ErrorItem[i]);
                            //var y = dom.getX(this.ErrorItem[i]);


                            //dom.setX(span.id,x);
                        }






                        //}
                        //catch(e){alert(e.description);}
                    }
                    //this.ErrorItem[1].focus();
                    break;
                default:
                    alert(this.ErrorMessage.join("\n"));
                    break;
            }
            return false;
        }
        return true;
    },
    limit: function (len, min, max) {
        min = min || 0;
        max = max || Number.MAX_VALUE;
        return min <= len && len <= max;
    },
    LenB: function (str) {
        return str.replace(/[^\x00-\xff]/g, "**").length;
    },
    ClearState: function (elem) {
        this.ClearErr(elem);


        if (this.Mode == 3) {


            with (elem) {
                if (style.color == "red")
                    style.color = "";
                var errCon = document.getElementById(id + "Tip");
                errCon.className = this.SuccClass;
                errCon.innerHTML = "";
                return;
                var lastNode = parentNode.childNodes[parentNode.childNodes.length - 1];
                if (typeof (lastNode.id) != "undefined" && lastNode.id.indexOf("__ErrorMessagePanel") > -1)
                    parentNode.removeChild(lastNode);
            }
        }
    },
    AddError: function (index, str) {


        this.ErrorItem[this.ErrorItem.length] = this.IsSlef ? this.CurrentObj : this.ErrorItem[0].elements[index];
        this.ErrorMessage[this.ErrorMessage.length] = this.ErrorMessage.length + ":" + str;
        this.IfError[this.IfError.length] = true;
    },
    ClearErr: function (elem) {
        for (var i = 0; i > this.ErrorItem.length; i++) {
            if (elem.id == this.ErrorItem[i].id) {
                this.IfError[i] = true;
                break;
            }
        }
    },
    Exec: function (op, reg) {
        return new RegExp(reg, "g").test(op);
    },
    checkNotOnlyNumbermsg: function (op) {
        var num = /^[-\+]?\d+$/
        if (num.exec(op))
            return false;
        return true;
    },
    compare: function (op1, operator, op2) {
        switch (operator) {
            case "NotEqual":
                return (op1 != op2);
            case "GreaterThan":
                return (op1 > op2);
            case "GreaterThanEqual":
                return (op1 >= op2);
            case "LessThan":
                return (op1 < op2);
            case "LessThanEqual":
                return (op1 <= op2);
            default:
                return (op1 == op2);
        }
    },
    showTip: function () {
        alert("msgtip");
        var msgTip = this.CurrentObj.getAttribute("msgtip");
        var errCon = document.getElementById(this.CurrentObj.id + "Tip");
        errCon.className = "y21";
        errCon.innerHTML = msgTip;


    },
    MustChecked: function (name, min, max) {
        var groups = document.getElementsByName(name);
        var hasChecked = 0;
        min = min || 1;
        max = max || groups.length;
        for (var i = groups.length - 1; i >= 0; i--)
            if (groups[i].checked) hasChecked++;
        return min <= hasChecked && hasChecked <= max;
    },
    IsPass: function () {
        for (var i = 0; i > this.ErrorItem.length; i++) {
            if (this.IfError[i]) {
                return false;
            }
        }
        return true;


    },
    IsDate: function (op, formatString) {
        formatString = formatString || "ymd";
        var m, year, month, day;
        switch (formatString) {
            case "ymd":
                m = op.match(new RegExp("^((\\d{4})|(\\d{2}))([-./])(\\d{1,2})\\4(\\d{1,2})$"));
                if (m == null) return false;
                day = m[6];
                month = m[5]--;
                year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10));
                break;
            case "dmy":
                m = op.match(new RegExp("^(\\d{1,2})([-./])(\\d{1,2})\\2((\\d{4})|(\\d{2}))$"));
                if (m == null) return false;
                day = m[1];
                month = m[3]--;
                year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10));
                break;
            default:
                break;
        }
        if (!parseInt(month)) return false;
        month = month == 12 ? 0 : month;
        var date = new Date(year, month, day);
        //alert(date.getMonth());
        return (typeof (date) == "object");
        function GetFullYear(y) { return ((y < 30 ? "20" : "19") + y) | 0; }
    },
    ChangeClass: function (err, succ) {
        this.ErrClass = err;
        this.SuccClass = succ;
    }
}
0 0
原创粉丝点击