通用数据校验函数

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

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)
return true;
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();
}
}
}
}
}
本来打算把所有需要校验的类型加进去再贴出来,但最近较忙,各位用的话自己加吧!上次跟了贴子说给一位朋友发,但也没发成,在这里表示谦意!
...全文
35 2 打赏 收藏 举报
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
bzscs 2003-12-13
http://expert.csdn.net/Expert/topic/2489/2489689.xml?temp=.3530542
  • 打赏
  • 举报
回复
谢谢楼主分享
  • 打赏
  • 举报
回复
相关推荐
发帖
JavaScript
加入

8.6w+

社区成员

Web 开发 JavaScript
申请成为版主
帖子事件
创建了帖子
2003-12-12 09:26
社区公告
暂无公告