以前寫的一個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();
??????}
??????? }
???????? }
????? }
}