javascript json数据验证函数

作者:简简单单 2009-07-24


这段代码可以验证手机,邮箱,QQ,电话,IP,数据,汉字,用户名合法性,邮箱等哦。
var fk;
var mode;
validator={
 errinput : 'errinput',
 errmsg : 'errmsg',
 errcls : 'no',
 yescls : 'yes',

 require : /[^(^s*)|(s*$)]/,
 email : /^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/,
 phone : /^(((d{2,3}))|(d{3}-))?((0d{2,3})|0d{2,3}-)?[1-9]d{6,7}(-d{1,4})?$/,
 mobile : /^(((d{3}))|(d{3}-))?13[0-9]d{8}?$|15[0-9]d{8}?$/,
 url : /^http://[A-Za-z0-9]+.[A-Za-z0-9]+[/=?%-&_~`@[]':+!]*([^<>""])*$/,
 idCard : "this.isIdCard(value)",
 currency : /^d+(.d+)?$/,
 number : /^d+$/,
 zip : /^[1-9]d{5}$/,
 ip  : /^[d.]{7,15}$/,
 qq : /^[1-9]d{4,8}$/,
 integer : /^[-+]?d+$/,
 double : /^[-+]?d+(.d+)?$/,
 english : /^[A-Za-z]+$/,
 chinese : /^[u0391-uFFE5]+$/,
 userName : /^[a-z_ ]w{3,}$/i,
 //unSafe : /^(([A-Z]*|[a-z]*|d*|[-_~!@#$%^&*.()[]{}<>?\/'"]*)|.{0,5})$|s/,
 unSafe : /[<>?#$*&;\/[]{}=().^%,]/,
 //safeStr : /[^#'"~.*$&;\/|]/,
 isSafe : function(str){return !this.unSafe.test(str);},
 safeString : "this.isSafe(value)",
 filter : "this.doFilter(value)",
 limit : "this.checkLimit(Common.strlen(value))",
 limitB : "this.checkLimit(this.LenB(value))",
 date : "this.isDate(value)",
 repeat : "this.checkRepeat(value)",
 range : "this.checkRange(value)",
 compare : "this.checkCompare(value)",
 custom : "this.Exec(value)",
 group : "this.mustChecked()",
 ajax: "this.doajax(errindex)",

 isIdCard : function(number){
 var date, Ai;
 var verify = "10x98765432";
 var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
 var area = ['','','','','','','','','','','','北京','天津','河北','山西','内蒙古','','','','','','辽宁','吉林','黑龙江','','','','','','','','上海','江苏','浙江','安微','福建','江西','山东','','','','河南','湖北','湖南','广东','广西','海南','','','','重庆','四川','贵州','云南','西藏','','','','','','','陕西','甘肃','青海','宁夏','新疆','','','','','','台湾','','','','','','','','','','香港','澳门','','','','','','','','','国外'];
 var re = number.match(/^(d{2})d{4}(((d{2})(d{2})(d{2})(d{3}))|((d{4})(d{2})(d{2})(d{3}[xd])))$/i);
 if(re == null) return false;
 if(re[1] >= area.length || area[re[1]] == "") return false;
 if(re[2].length == 12){
  Ai = number.substr(0, 17);
  date = [re[9], re[10], re[11]].join("-");
 } else {
  Ai = number.substr(0, 6) + "19" + number.substr(6);
  date = ["19" + re[4], re[5], re[6]].join("-");
 }
 if(!this.isDate(date, "ymd")) return false;
 var sum = 0;
 for(var i = 0;i<=16;i++){
  sum += Ai.charAt(i) * Wi[i];
 }
 Ai += verify.charAt(sum%11);

 return (number.length ==15 || number.length == 18 && number == Ai);
 },

 isDate : function(op){
  var formatString = this['element'].attr('format');
  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]*1;
   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]*1;
   year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10));
  break;
  default :
   break;
  }
  if(!parseInt(month)) return false;
  month = month==0 ?12:month;
  var date = new Date(year, month-1, day);
  return (typeof(date) == "object" && year == date.getFullYear() && month == (date.getMonth()+1) && day == date.getDate());
  function GetFullYear(y){
   return ((y<30 ? "20" : "19") + y)|0;
  }
 }, //end isDate
 doFilter : function(value){
  var filter =this['element'].attr('accept');
  return new RegExp("^.+.(?=EXT)(EXT)$".replace(/EXT/g,filter.split(/s*,s*/).join("|")),"gi").test(value);
 },

 checkLimit:function(len){
  var minval=this['element'].attr('min') ||Number.MIN_VALUE;
  var maxval=this['element'].attr('max') ||Number.MAX_VALUE;
  return (minval<= len && len<=maxval);

 },

 LenB : function(str){
  return str.replace(/[^x00-xff]/g,"**").length;
 },

 checkRepeat:function(value){
  var to = this['element'].attr('to');
  return value==jQuery('input[name="'+to+'"]').eq(0).val();
 },

 checkRange : function(value){
  value = value|0;
  var minval=this['element'].attr('min') || Number.MIN_VALUE;
  var maxval=this['element'].attr('max') || Number.MAX_VALUE;
  return (minval<=value && value<=maxval);
 },

 checkCompare : function(value){
  var compare=this['element'].attr('compare');
  if(isNaN(value)) return false;
  value = parseInt(value);
  return eval(value+compare);
 },

 Exec : function(value){
  var reg = this['element'].attr('regexp');
  return new RegExp(reg,"gi").test(value);
 },

 mustChecked : function(){
  var tagName=this['element'].attr('name');
  var f=this['element'].parents('form');
  var n=f.find('input[name="'+tagName+'"][checked]').length;
  var count = f.find('input[name="'+tagName+'"]').length;
  var minval=this['element'].attr('min') || 1;
  var maxval=this['element'].attr('max') || count;
  return (minval<=n && n<=maxval);
 },

 doajax : function(value) {
  var fk;
  var element = this['element'];
  var errindex = this['errindex'];
  var url=this['element'].attr('url');
  var mode = element.attr('mode') || 1 ;
  var msgid = element.attr('msgid');
  var val = this['element'].val();
  var str_errmsg=this['element'].attr('msg');
  var arr_errmsg = str_errmsg.indexOf('|') ? str_errmsg.split('|') :str_errmsg;
  var errmsg = arr_errmsg[errindex];
  var type=this['element'].attr('type');
  var errcls=this['errcls'];
  var yescls=this['yescls'];
  var param = val ?this['element'].attr('param') + '&value=' + val : this['element'].attr('param'); 
  var Charset = Browser.isIE ? document.charset : document.characterSet;
  var methodtype = (Charset.toLowerCase() == 'utf-8') ? 'post' : 'get';
  var method=this['element'].attr('method') || methodtype;
  var s = $.ajax({
   type: method,
   url: url,
   data: param,
   cache: false,
   async: false,
   success: function(data){
    data = data.replace(/(^s*)|(s*$)/g, "");
       if(data != 'success')
       {
       errmsg = errmsg ? errmsg : data;
       fk = false;
       (type!='checkbox' && type!='radio' && element.addClass('errinput'));
       if(mode == 1)
       {
        if(msgid)
        {
         id = '#' + msgid;
         $(id).removeClass('yes');
         $(id).addClass('no');
         $(id).html(errmsg);
        }
        else
        {
         jQuery("").html(errmsg).insertAfter(element);
        }

       }
       else if(mode == 2)
       {
        alert(errmsg);
       }

       return false;
       }
       else
       {
        fk = true;
        if(msgid)
      {
       id = '#' + msgid;
       $(id).removeClass('no');
       $(id).addClass('yes');
       $(id).html('');
      }
      else
      {

       jQuery(" ").insertAfter(element);
      }
        return true;
       }
      }
   }).responseText;
   s = s.replace(/(^s*)|(s*$)/g, "");
   return s == 'success' ? true : false;
 }
};

validator.showErr=function (element, errindex){
 var str_errmsg=element.attr('msg') ||'unkonwn';
 var arr_errmsg = str_errmsg.split('|');
 var errmsg = arr_errmsg[errindex] ? arr_errmsg[errindex]: arr_errmsg[0];
 var mode = element.attr('mode') || 1;
 var msgid= element.attr('msgid');
 var type=element.attr('type');
 (type!='checkbox' && type!='radio' && element.addClass(this['errinput']));
 if(mode == 1)
 {
  if(msgid)
  {
   id = '#' + msgid;
   $(id).removeClass('yes');
   $(id).addClass('no');
   $(id).html(errmsg);
  }
  else
  {
   jQuery("").html(errmsg).insertAfter(element);
  }
 }
 else
 {
  alert(errmsg);
 }
}

validator.removeErr =  function(element){
 element.removeClass(this['errinput']);
 element.parent('*').find('span[tag="err"]').remove();
}

validator.checkajax = function(element, datatype, errindex)
{
 var value=jQuery.trim(element.val());
 this['element'] = element;
 this['errindex'] = errindex;
 validator.removeErr(element);
 return eval(this[datatype]);
}

validator.checkDatatype = function(element,datatype){
 var value=jQuery.trim(element.val());
 this['element'] = element;
 validator.removeErr(element);
 switch(datatype){
  case "idCard" :
  case "date" :
  case "repeat" :
  case "range" :
  case "compare" :
  case "custom" :
  case "group" :
  case "limit" :
  case "limitB" :
  case "safeString" :
  case "filter" :
  return eval(this[datatype]);
  break;

  default:
   return this[datatype].test(value);
   break;
  }
}

validator.check=function(obj){
 var datatype = obj.attr('datatype');
 if(typeof(datatype) == "undefined") return true;

 if(obj.attr('require')!="true" && obj.val()=="") return true;
 var datatypes = datatype.split('|');
 var ok = true;

 jQuery.each(datatypes,function(index,data){
  if(typeof(validator[data]) == "undefined") {
   ok = false;
   return  false;
  }
  if(data != 'ajax')
  {
   if(validator.checkDatatype(obj,data)==false){
    validator.showErr(obj, index);
    return ok=false;
   }
   else
   {
    var msgid= obj.attr('msgid');
    if(msgid)
    {
     id = '#' + msgid;
     $(id).removeClass('no');
     $(id).addClass('yes');
     $(id).html('');
    }
    else
    {

     jQuery("").insertAfter(obj);
    }
   }
  }
  else
  {
   ok = validator.checkajax(obj, data, index);
  }
 });
 return ok;
}

jQuery.fn.checkForm = function(m){
 mode = (m==1) ? 1 : 0;
 var form=jQuery(this);
 var elements = form.find('input[require],select[require],textarea[require]');
 elements.blur(function(index){
  return validator.check(jQuery(this));
 });

 form.submit(function(){
  var ok = true;
  var errIndex= new Array();
  var n=0;
  elements.each(function(i){
   if(validator.check(jQuery(this))==false){
    ok = false;
    errIndex[n++]=i;
   };
  });

  if(ok==false){
   elements.eq(errIndex[0]).focus().select();
   return false;
  }
  if(document.getElementById('video_uploader') && !upLoading)
  {
   uploadFile();
   return false;
  }
  if($('#f_filed_1') && set_show==false)
  {
   $("select[@id=catids] option").each(function()
   {
    $(this).attr('selected','selected');
   });
  }
  if($('#hava_checked').val()==0)
  {
   YP_checkform();
   return false;
  }
  return true;
 });
}

相关文章

精彩推荐