GalaxyPilot —— D.S


        生命不熄,战斗不止
数据加载中……

以前写的一个javascript数据校验函数

////////////////////////////////////////////////////////////////////////////
//
// 通用数据校验函数,调用该函数需要传两个对像参数
// 表单需要定义三个扩展属性:nullable,datatype,cname 
// nullable属性用来说明该表单是否可以为空
//            y——可以为空,n——不能为空
// datatype属性用来说明该表单的数据类型,
//            n——整型,m——浮点(例ma.b),
//             f——固定长度整数,d——日期型
//cname属性用来定义在数据校验失败时提示信息中出现的字出错字段名称
//maxlength的取值应该和数据库对应字段长度一直或小于
// 
//         最后修改日期:2003-12-02                        By 舵手
// 
///////////////////////////////////////////////////////////////////////////

var msg="";
/* 取得字符串的字节长度 */
function strlen(str)
 {
  var i;
        var len;
        len = 0;
        for (i=0;i<str.length;i++)
   {
   if (str.charCodeAt(i)>255) len+=2; else len++;
  }
        return len;
}
/* 检测字符串是否为空*/
function isnull(str)
 {
  var i;
        for (i=0;i<str.length;i++)
   {
   if (str.charAt(i)!=' ') return false;
        }
        return true;
}

/* 检测字符串是否全为数字 */
function isnumber(str)
 {
  var number_chars = "1234567890";
        var i;
        for (i=0;i<str.length;i++)
   {
            if (number_chars.indexOf(str.charAt(i))==-1) return false;
        }
        return true;
}
/* 检测字符串是否是指点的数点数 */
function isfloat(str,typ){
  var number_chars = "1234567890.";
        var i;
        for (i=0;i<str.length;i++){
            if (number_chars.indexOf(str.charAt(i))==-1){
       msg="这里应该是数字;";
    return false;
   }
        }
  if (str.length==0)
  {
   msg="数字位不能为空";
   return false;
  }
  var len=typ.length;
  var po=typ.indexOf(".");
  if (po==-1){
   intlen=typ.substring(1,len);
   floatlen="0";
  }
  else{
      var intlen=typ.substring(1,po);
      var floatlen=typ.substring(po+1,len);
  }
  
  var len=str.length;
  var po=str.indexOf(".");
  if (po==-1){
   ints=str.substring(0,len);
   floats="0";
  }
  else{
      var ints=str.substring(0,po);
      var floats=str.substring(po+1,len);
  }
        if (intlen<ints.length){
   msg="整数位超过长度;";
   return false;
  }
  if (floatlen<floats.length){
   msg="小数位超过长度;";
   return false;
  }
  return true;
}
/* 检测字符串是否是有效日期 */
String.prototype.isDate=function(){
 var re=/^(\d{1,4})(-|\/|\.)(\d{1,2})\2(\d{1,2})$/;
 var r=this.match(re);
 if(r==null) return false;
 var d=new Date(r[1],r[3]-1,r[4]);
 return (d.getFullYear()==r[1]&&d.getMonth()==r[3]-1&&d.getDate()==r[4]);
}
/*检测数据类型*/
String.prototype.isType=function(){
 var re=/^\m((\d+)*)((\.\d+)*)$/;
 var r=this.match(re);
 if (r != null)
  return true;
}

/* 检测字符串是否满足要求 */
function verify(obj,flag)
{
 var nam,val,len,max,nulll,typee,bool,str,boo,typ;
 str="";
    bool=true;
 boo=true
    for (i=0;i<obj.elements.length;i++)
 {
  if (!bool)
            break;
     max=obj.elements[i].maxLength;
  val=(obj.elements[i].value);
  nam=(obj.elements[i].name); 
  typee=obj.elements[i].datatype;
  if (nam=="editmode" && flag)
  {
   break;
  }
  if (nam !="editmode" && !flag && boo)
   continue;
  else
   boo=false;
        len=strlen(val);
  if (typee!=null && typee!="undefined")
  {
   if (typee.isType()){
       typ=typee;
    typee="m";
    max=max+1;
   }    
  }
       
  if (len>max)
  {
         str="【"+obj.elements[i].cname+"】"+"超过限制长度;";
            obj.elements[i].focus();
   obj.elements[i].select();
   bool=false;
   alert(str);
   break;
  }
  nulll=obj.elements[i].nullable;
  if (nulll=="n")
     {
   if (isnull(val))
   {
          str="【"+obj.elements[i].cname+"】"+"不能为空;";
    obj.elements[i].focus();
       obj.elements[i].select();
    bool=false;
    alert(str);
                break;
   }
  }
  
  switch(typee)
  {
   case "n" : if (isnumber(val)==false)
   {
     str="【"+obj.elements[i].cname+"】"+"应该是数字;";
     obj.elements[i].focus();
        obj.elements[i].select();
     bool=false;
     alert(str); 
   }
   break;
            case "m" : if (isfloat(val,typ)==false)
      {
     str="【"+obj.elements[i].cname+"】"+"数字的格式不正确"+"——"+msg;
     obj.elements[i].focus();
        obj.elements[i].select();
     bool=false;
     alert(str);
   }
   break;
   case "f" : if (isnumber(val)==false || (max!=len && len!=""))
      {
     str="【"+obj.elements[i].cname+"】"+"不是数字或长度无效;";
     obj.elements[i].focus();
        obj.elements[i].select();
     bool=false;
     alert(str);
   }
   break;

   case "d" : if (! val.isDate() && val!="")
      {
     str="【"+obj.elements[i].cname+"】"+"日期格式无效;";
     obj.elements[i].focus();
        obj.elements[i].select();
     bool=false;
     alert(str);
   }
   break;
   //在这里可以加入其它数据类型校验
   default : break;
  }
 }
 return bool;  
}
/*回车转换焦点*/
function keyenter(obj,obje)
{
 var keycd,i,nam,ii,bool;
 keycd=event.keyCode;
 ii=obj.elements.length;
 nam=obje.name;
 bool=true;
 if (keycd==13)
 {
      for (i=0;i<obj.elements.length;i++)
             {
     if (bool)
     if (nam==(obj.elements[i].name))
         {
         bool=false;
         if (i+1<ii)
      {
                   obj.elements[i + 1].focus();
      }
        }
         }
      }
}

posted on 2006-05-09 09:04 舵手 阅读(2559) 评论(4)  编辑  收藏

评论

# re: 以前写的一个javascript数据校验函数  回复  更多评论   

写得好烂~
2006-05-10 09:28 | xxx

# re: 以前写的一个javascript数据校验函数  回复  更多评论   

是的,写的确实很烂。当时刚接触B/S的开发。后来用不到这个,也就没完善过!
2006-05-10 13:51 | 舵手 QQ:8117892

# re: 以前写的一个javascript数据校验函数[未登录]  回复  更多评论   

强哥,好~
2007-04-06 14:36 | Bright

# re: 以前写的一个javascript数据校验函数  回复  更多评论   

@Bright

不知道你是那位?
2007-04-07 08:29 | 舵手 QQ:8117892

只有注册用户登录后才能发表评论。


网站导航: