正则验证

来源:互联网 发布:上海软件协会网站 编辑:程序博客网 时间:2024/05/01 00:13
var validationErrorMessage = new Object();
validationErrorMessage['required'] = '不可以为空';
validationErrorMessage['numeric'] = '只能输入数字';
validationErrorMessage['postcode'] = 'This field must hold a Dutch postal code';
validationErrorMessage['pattern'] = 'Pattern incorrect';
validationErrorMessage['email'] = '邮箱格式不正确(如:abc@example.com)';
validationErrorMessage['noallnum'] = '不能全是数字或者下划线';
validationErrorMessage['username'] = '4-16位字符(英文小写、数字、下划线)';
validationErrorMessage['password'] = '6-16位字符(字母、数字、符号)';
validationErrorMessage['chinesename'] = '2-6位汉字';
validationErrorMessage['nickname'] = '4-20位字符(英文小写、数字、汉字)';
validationErrorMessage['phonenum'] = '不超过15位的数字';
validationErrorMessage['keywords'] = '不超过5个,每个最多10个汉字(20个字符)';

validationErrorMessage['usernamemsg'] = '4-16位字符(英文小写、数字、下划线)不能全是数字和下划线';
validationErrorMessage['lengthfunmsg'] = '不超过400个字符(200个汉字)';


validationErrorMessage['descmsg'] = '不超过400个字符(200个汉字)';


validationErrorMessage['correct'] = '恭喜正确';
 

 
var validationFunctions = new Object();
validationFunctions["required"] = isRequired;
validationFunctions["pattern"] = isPattern;
validationFunctions["postcode"] = isPostCode;
validationFunctions["numeric"] = isnumeric;
validationFunctions["email"] = isEmail;
validationFunctions["noallnum"] = isNoAllNum;
validationFunctions["username"] = isusername;
validationFunctions["password"] = isPassWord;
validationFunctions["chinesename"] = isChineseName;
validationFunctions["nickname"] = isNickName;
validationFunctions["phonenum"] = isPhoneNum;
 
validationFunctions["lengthfun"] = isLengthFun;
validationFunctions["keywords"] = keyWords;

function RTrim(str){
 
var i;
for(i=str.length-1;i>=0;i--){
if(str.charAt(i)!=" "&&str.charAt(i)!=" ") break;
}
str = str.substring(0,i+1);
return str;
}
function LTrim(str){ //去掉字符串 的头空格
 
var i;
 
for(i=0;i<str.length;i++){
  if(str.charAt(i)!=" "&&str.charAt(i)!=" ") {
       break;
   }
}


 
str = str.substring(i,str.length);
 
return str;
 
}

function trim(str){

  return LTrim(RTrim(str));
}



function keyWords(formField){
   var str = (formField.value) ;
   var arr = str.split(',');
   if(!str){
       return true;
   }

   if(arr.length > 5){
     return false;
   }
   for(var i=0;i<arr.length;i++){
      
      var l = arr[i].replace(/[^\x00-\xff]/g, "**").length;
      if(l > 20 || !arr[i]){
           return false;
             
      }
   }
   
   return true;
    

}


function isLengthFun(formField){
        var str = trim(formField.value) ;
     
        var fieldLength = str.replace(/[^\x00-\xff]/g, "**").length;
        var len = formField.getAttribute('len');
        var lens = len.split(' ');
        if(fieldLength > lens[1] || fieldLength < lens[0]){
         
             validationErrorMessage['lengthfun']='长度在'+lens[0]+'-'+lens[1]+'之间('+parseInt(lens[1]/2)+'个汉字)';
             return false;
        }
        return true;

}
 

function isRequired(formField) {
    switch (formField.type) {
        case 'text':
        case 'textarea':
        case 'select-one':
            if (formField.value)
                return true;
            return false;
        case 'radio':
            var radios = formField.form[formField.name];
            for (var i = 0; i < radios.length; i++) {
                if (radios[i].checked) return true;
            }
            return false;
        case 'checkbox':
            return formField.checked;
    }
}

function isPattern(formField, pattern) {
 
 
    var correct = pattern.test(formField.value);
     
    if (!correct && formField.getAttribute('patternDesc'))
        correct = formField.getAttribute('patternDesc');
    return correct;
}

function isPostCode(formField) {
    
    return isPattern(formField, "\\d{4}\\s*\\D{2}");
}

function isnumeric(formField) {
    return isPattern(formField, "\\d+");
}

function isEmail(formField) {
    var regExp = /^(?:[a-z\d]+[_\-\+\.]?)*[a-z\d]+@(?:([a-z\d]+\-?)*[a-z\d]+\.)+([a-z]{2,})+$/i;
    return isPattern(formField,regExp);
}

function isNoAllNum(formField) {
    var regExp =  /^(?!\d+$)(?!_+$)/;
    return isPattern(formField, regExp);
}

function isusername(formField) {
    var regExp = /^([a-z0-9_]){4,16}$/;
    return isPattern(formField, regExp);
}

function emptyFunction() {
    return true;
}

//

function isPassWord(formField) {
    var regExp = /^[0-9a-zA-Z\_!~@&#$%^*+=,.?;'":)(}{/\\\|]{6,16}$/;
    return isPattern(formField, regExp);
}

//
function isChineseName(formField) {
    var regExp = /^[\u4e00-\u9fa5]{2,6}$/;
    return isPattern(formField, regExp);
}

//  var b= /^[a-z0-9\u4e00-\u9fa5]{4,20}$/;
function isNickName(formField) {
    var regExp =/^[a-z0-9\u4e00-\u9fa5]{4,20}$/;
    return isPattern(formField, regExp);
}

function isPhoneNum(formField) {
    var regExp =/^[0-9]{0,15}$/;
    return isPattern(formField, regExp);
}




/*********************************/

//     var W3CDOM = document.createElement && document.getElementsByTagName;
//     
//     function validateForms(id) {
//         //         if (!W3CDOM) return;  
//console.log(id)

//         var forms = document.getElementById(id);
//         console.log(forms)
//         forms.onsubmit = validate;
//         for (var i=0;i<forms.length;i++) {
//             forms[i].onsubmit = validate;
////         }
//}


//     addEventSimple(window,'load',validateForms);

function validate(id) {

 
     
    var form = document.getElementById(id);
    
    var els = form.elements;
    var validForm = true;
    var firstError = null;
    for (var i = 0; i < els.length; i++) {
      
        if (els[i].removeError)
            els[i].removeError();
        var req = els[i].getAttribute('validation');
        if (!req) continue;
        var reqs = req.split(' ');
          onChangeMessage(els[i]);
        if (els[i].getAttribute('pattern'))
            reqs[reqs.length] = 'pattern';
        for (var j = 1; j < reqs.length; j++) {
               
          //  if (!validationFunctions[reqs[j]])
           //     validationFunctions[reqs[j]] = emptyFunction;
            var OK = validationFunctions[reqs[j]](els[i]);
            if(OK){
            
                writeRightMessage(els[i], validationErrorMessage['correct']);
            }
            
            if (OK != true) {
                var errorMessage = OK || validationErrorMessage[reqs[j]];
                writeErrorMessage(els[i], errorMessage)
                validForm = false;
                if (!firstError)
                    firstError = els[i];
               break;
            }
        }
    }
       if(validForm){
          for (var i = 0; i < els.length; i++) {
          
            var r = els[i].getAttribute('validation');
            if (!r) continue;
            var rs = r.split(' ');
            els[i].nextSibling.innerHTML=   validationErrorMessage[rs[0]];
             removeClassName (els[i].nextSibling, "onCorrect");
             removeClassName (els[i].nextSibling, "onError");
             
          }
 
     }
     
    return validForm;

}

function onChangeMessage(obj){
       obj.onchange = removeError;
       obj.labelObj = obj.nextSibling;
     // obj.msg = obj.nextSibling.innerHTML;
     
     

}



function writeRightMessage(obj, message) {
    
    obj.labelObj.innerHTML = message;
    obj.labelObj.className = "onCorrect";

}



function writeErrorMessage(obj, message) {
    
    obj.labelObj.innerHTML = message;
    obj.labelObj.className = "onError";
}

function removeError() {
    this.labelObj.innerHTML ="";
}

function  removeClassName (element, className)
{
    if (!element) return;
    var elementClassName = element.className;
    if (elementClassName.length == 0) return;
    if(elementClassName == className)
    {
        element.className = "";
        return;
    }
    if (elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
        element.className = elementClassName.replace((new RegExp("(^|\\s)" + className + "(\\s|$)"))," ");
}
    

 var validationErrorMessage = new Object();
validationErrorMessage['required'] = '不可以能为空';
validationErrorMessage['numeric'] = '只能输入数字';
validationErrorMessage['postcode'] = 'This field must hold a Dutch postal code';
validationErrorMessage['pattern'] = 'Pattern incorrect';
validationErrorMessage['email'] = '邮箱格式不正确(如:abc@example.com)';
validationErrorMessage['noallnum'] = '不能全是数字或者下划线';
validationErrorMessage['username'] = '4-16位字符(英文小写、数字、下划线)';
validationErrorMessage['password'] = '6-16位字符(字母、数字、符号)';
validationErrorMessage['chinesename'] = '1-20位字符';
validationErrorMessage['nickname'] = '4-20位字符(英文小写、数字、汉字)';
validationErrorMessage['phonenum'] = '不超过15位的数字';
validationErrorMessage['keywords'] = '不超过5个,以逗号分开,每个最多10个汉字(20个字符)';
validationErrorMessage['usernamemsg'] = '4-16位字符(英文小写、数字、下划线)不能全是数字和下划线';
validationErrorMessage['lengthfunmsg'] = '不超过400个字符(200个汉字)';
validationErrorMessage['descmsg'] = '不超过400个字符(200个汉字)';
validationErrorMessage['resnamemsg'] = '不超过100个字符(50个汉字)';
validationErrorMessage['teachermsg'] = '1-20位字符';
validationErrorMessage['requiredmsg'] = '请选择一项';
validationErrorMessage['keywordsmsg'] = '不超过5个,以逗号分开,每个最多10个汉字(20个字符)';
validationErrorMessage['nicknamemsg'] = '4-20位字符(英文小写、数字、汉字)汉字算两个';
validationErrorMessage['emailmsg'] = '请输入正确的邮箱格式(如:abc@example.com)';
validationErrorMessage['correct'] = '恭喜正确';
validationErrorMessage['psdmsg'] = '6-16位字符(字母、数字、符号';
 
function keyWords(formField) {

    var arr = formField.split(',');
 
    if (!formField) {
        return true;
    }

    if (arr.length > 5) {
        return false;
    }
    for (var i = 0; i < arr.length; i++) {

        var l = arr[i].replace(/[^\x00-\xff]/g, "**").length;
        if (l > 20 || !arr[i]) {
            return false;

        }
    }

    return true;
}

function isUserName(formField) {
    var regExp = /^([a-z0-9_]){4,16}$/;
    return regExp.test(formField);
}

function isNoAllNum(formField) {
    var regExp = /^(?!\d+$)(?!_+$)/;
    return regExp.test(formField);
}

function isChineseName(formField) {
    var regExp = /^[\u4e00-\u9fa5]{2,6}$/;
    return regExp.test(formField);
}

function isPhoneNum(formField) {
    var regExp = /^[0-9]{0,15}$/;
    return regExp.test(formField);
}

function isIp(formField) {
    var regExp = /^(?:(?:25[0-5]|2[0-4]\d|[1-9]\d?|1\d\d)\.)((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){2}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))$/;
    return regExp.test(formField);
}


function fieldLength(formField, len1, len2) {
 
    var len = formField.replace(/[^\x00-\xff]/g, "**").length;

    if (len > len2 || len <len1) {

        
        return false;
    }
    return true;

}

$.extend($.fn.validatebox.defaults.rules, {
    descLength: {
        validator: function (value, param) {
            var v = $.trim(value);
           
            return fieldLength(v, param[0], param[1]);
        },
        message: validationErrorMessage['descmsg']
    }

});

$.extend($.fn.validatebox.defaults.rules, {
    itemLength: {
        validator: function (value, param) {
            var v = $.trim(value);
           
            return fieldLength(v, param[0], param[1]);
        },
        message: "不超过20个字符(10个汉字)"
    }

});



$.extend($.fn.validatebox.defaults.rules, {
    titleLength: {
        validator: function (value, param) {
            var v = $.trim(value);

            return fieldLength(v, param[0], param[1]);
        },
        message: validationErrorMessage['resnamemsg']
    }

});




$.extend($.fn.validatebox.defaults.rules, {
    desc: {
        validator: function (value, param) {
            var v = $.trim(value);

            return keyWords(v);
        },
        message: validationErrorMessage['descmsg']
    }
});



$.extend($.fn.validatebox.defaults.rules, {
    keyWords: {
        validator: function (value, param) {
            var v = $.trim(value);

            return keyWords(v);
        },
        message: validationErrorMessage['keywordsmsg']
    }
});



$.extend($.fn.validatebox.defaults.rules, {
    isPhoneNum: {
        validator: function (value, param) {
            var v = $.trim(value);
           
            return isPhoneNum(v);
        },
        message: validationErrorMessage['phonenum']
    }
});

$.extend($.fn.validatebox.defaults.rules, {
    isChineseName: {
        validator: function (value, param) {
            var str = $.trim(value);
             var fieldLength = str.replace(/[^\x00-\xff]/g, "**").length;
              if(str.length==0){
                  return true
              }
              else if(fieldLength > 20||fieldLength < 1){
                  return false;
              }
              return true;

            
        },
        message: validationErrorMessage['teachermsg']
    }
});


$.extend($.fn.validatebox.defaults.rules, {
    checkLoginName: {
        validator: function (value, param) {
            var v = $.trim(value);
            var len = v.length;

            
            return isNoAllNum(v) && len >= param[0] && len <= param[1] && /^[0-9a-zA-Z_]+$/.test(v);
        },
        message: validationErrorMessage['usernamemsg']
    }
});

$.extend($.fn.validatebox.defaults.rules, {
    validAllNumber: {
        validator: function (value, param) {
            var v = $.trim(value);
            return isNoAllNum(v);
        },
        message: "不能全部是数字和下划线."
    }
});

$.extend($.fn.validatebox.defaults.rules, {
    validIp: {
        validator: function (value, param) {
            return isIp(value);
        },
        message: "IP格式不对."
    }
});


$.extend($.fn.validatebox.methods, {
    removeTip: function (jq) {
        return jq.each(function () {
            var tip = $.data(this, "validatebox").tip;
            if (tip) {
                tip.remove();
                $.data(this, "validatebox").tip = null;
            }
        });
    }
});

$.extend($.fn.validatebox.defaults.rules, {
    validPath: {
        validator: function (value, param) {
            var v = $.trim(value);
            var b = /\\/gi;
            var c = v.replace(b, '\\\\');
          
            return /^[a-zA-Z]:\\[^/:*?"<>|]+$/.test(c);
        },
        message: "路径格式不对."
    }
});

$.extend($.fn.validatebox.defaults.rules, {
    numeric: {
        validator: function (value, param) {

            return /^(0|[1-9]\d*)$/.test(value);
        },
        message: "请输入数字."
    }
});


$.extend($.fn.validatebox.defaults.rules, {
    powernumber: {
        validator: function (value, param) {
        var flag1=/^[1-9]\d*$/.test(value);
        var flag2=Boolean(value>=1&&value<=100);
        return flag1&&flag2;
//            return /^((0\.[0-9]{1,2})|(1(\.(0+))?))$/.test(value);
        },
//        message: "请输入0.1~1.0之间保留两位小数的数字."
 message: "请输入1~100之间的数字."
    }
});

$.extend($.fn.validatebox.defaults.rules, {
    sizenumber: {
        validator: function (value, param) {
        var flag1=/^[1-9]\d*$/.test(value);
        var flag2=Boolean(value>=1&&value<=1000);
        return flag1&&flag2;
//            return /^((0\.[0-9]{1,2})|(1(\.(0+))?))$/.test(value);
        },
//        message: "请输入0.1~1.0之间保留两位小数的数字."
 message: "请输入1~1000之间的数字."
    }
});




$.extend($.fn.validatebox.defaults.rules, {
    numerSpecil: {
        validator: function (value, param) {
        var flag3=(value=="-1");
        
        var flag4=/^(0|[1-9]\d*)$/.test(value);
            return  flag3||flag4;
        },
        message: "请输入-1或者其他数字."
    }
});






$.extend($.fn.validatebox.defaults.rules, {
    portnumer: {
        validator: function (value, param) {
        var flag1=/^[\d]+$/.test(value);
        var flag2=(value>=1)&&(value<=65535);


            return flag1&&flag2;
        },
        message: "请输入1到65535之间的数字."
    }
});



function transformDate(date) {
   if(date){
    var jstr = '{"d":"' + date + '"}'
    var reg = new RegExp('"/Date\\((-?[0-9]+)\\)/"', 'g');
    d = jstr.replace(reg, "new Date($1)");
    obj = eval('(' + d + ')');
    return DateFormat.format(obj.d, 'yyyy-MM-dd hh:mm:ss'); ;
    }

}

DateFormat = (function () {
    var SIGN_REGEXP = /([yMdhsm])(\1*)/g;
    var DEFAULT_PATTERN = 'yyyy-MM-dd';
    function padding(s, len) {
        var len = len - (s + '').length;
        for (var i = 0; i < len; i++) { s = '0' + s; }
        return s;
    };
    return ({
        format: function (date, pattern) {
            pattern = pattern || DEFAULT_PATTERN;
            return pattern.replace(SIGN_REGEXP, function ($0) {
                switch ($0.charAt(0)) {
                    case 'y': return padding(date.getFullYear(), $0.length);
                    case 'M': return padding(date.getMonth() + 1, $0.length);
                    case 'd': return padding(date.getDate(), $0.length);
                    case 'w': return date.getDay() + 1;
                    case 'h': return padding(date.getHours(), $0.length);
                    case 'm': return padding(date.getMinutes(), $0.length);
                    case 's': return padding(date.getSeconds(), $0.length);
                }
            });
        },
        parse: function (dateString, pattern) {
            var matchs1 = pattern.match(SIGN_REGEXP);
            var matchs2 = dateString.match(/(\d)+/g);
            if (matchs1.length == matchs2.length) {
                var _date = new Date(1970, 0, 1);
                for (var i = 0; i < matchs1.length; i++) {
                    var _int = parseInt(matchs2[i]);
                    var sign = matchs1[i];
                    switch (sign.charAt(0)) {
                        case 'y': _date.setFullYear(_int); break;
                        case 'M': _date.setMonth(_int - 1); break;
                        case 'd': _date.setDate(_int); break;
                        case 'h': _date.setHours(_int); break;
                        case 'm': _date.setMinutes(_int); break;
                        case 's': _date.setSeconds(_int); break;
                    }
                }
                return _date;
            }
            return null;
        }
    });
})();




原创粉丝点击