当前位置:Linux教程 - Php - 通用表单验证函数-改进版

通用表单验证函数-改进版

通用表单验证函数-改进版
一、用法简介:
表单验证函数放在了functions.js文件里了,在你所需要做验证的网页文件里,包含该脚本文件。
对于焦点失去验证,为表单控件的onBlur事件绑定相应的验证函数,用法如下:
整型   checkNumber()
浮点型 checkNumber()
字符串 checkString()
日期   checkDate()
邮箱   checkEmail()
示例 onBlur="checkNumber()"
对于表单提交验证,在表单提交前进行判断,用法如下:
if(checkForm('表单名称'))
{
  表单名称.submit();
  return true;
}
else
{
  return false;
}
也可以绑定表单onSubmit事件,用法如下:
onSubmit="return checkForm('表单名称')"


二、类型定义:

1、整型(int)
定义:
  valueType="int"
属性:
  objName   对象名称(字符串)
  mustInput 必输项(true/false)
  minInput  最小值(数字)
  maxInput  最大值(数字)
举例:
  <input type="text" name="test" valueType="int" objName="总载重吨" mustInput="true" maxInput="10000">

2、浮点型(float)
定义:
  valueType="float"
属性:
  objName   对象名称(字符串)
  mustInput 必输项(true/false)
  minInput  最小值(数字)
  maxInput  最大值(数字)
  decimalLen小数位数(数字)
举例:
  <input type="text" name="test" valueType="float" objName="运价" mustInput="true" maxInput="10000.50" decimalLen="2">

3、字符串(string)
定义:
  valueType="string"
属性:
  objName   对象名称(字符串)
  mustInput 必输项(true/false)
  stringLen 字符串长度(数字)
举例:
  <input type="text" name="test" valueType="string" objName="英文船名" mustInput="true" stringLen="100">

4、日期(date)
定义:
  valueType="date"
属性:
  objName   对象名称(字符串)
  mustInput 必输项(true/false)
举例:
  <input type="text" name="test" valueType="date" objName="开始日期" mustInput="true">
备注:
  日期现在只能校验的格式为(yyyy-mm-dd)

5、邮箱(email)
定义:
  valueType="email"
属性:
  objName   对象名称(字符串)
  mustInput 必输项(true/false)
举例:
  <input type="text" name="test" valueType="email" objName="邮箱" mustInput="true">

6、单选(radio)
定义:
  valueType="radio"
属性:
  objName   对象名称(字符串)
  mustSelect 必输项(true/false)
举例:
  <input type="radio" name="test" valueType="radio" objName="租船方式" mustSelect="true">
备注:
  对于同一组单选按钮,只需要定义第一个即可。

7、复选(checkbox)
定义:
  valueType="checkbox"
属性:
  objName   对象名称(字符串)
  minSelect 最小选择数(数字)
  maxSelect 最大选择数(数字)
举例:
  <input type="checkbox" name="test" valueType="checkbox" objName="爱好" minSelect="2" maxSelect="5">
备注:
  对于同一组复选按钮,只需要定义第一个即可。

8、下拉列表框(select)
定义:
  valueType="select"
属性:
  objName   对象名称(字符串)
  mustSelect 必输项(true/false)
举例:
  <select name="test" valueType="select" objName="租船方式" mustSelect="true">

9、列表框(list)
定义:
  valueType="list"
属性:
  objName   对象名称(字符串)
  minSelect 最小选择数(数字)
  maxSelect 最大选择数(数字)
举例:
  <select name="test" valueType="list" objName="爱好" minSelect="2" maxSelect="5">




三、程序文件
<?php
/****************************functions.js*******************************/
/***检查表单所有元素***/
function checkForm(formName)
{
    var
oForm=document.all(formName);
var
eles = oForm.elements;
    
//遍历所有表元素
for(var i=0;i<eles.length;i++)
    {
        
//是否需要验证
        
var sType=eles[i].valueType;
  if(
sType)
        {
   if(
eles[i].mustInput!=null && eles[i].mustInput=="true")
   {
    if(
trim(eles[i].value)=="")
    {
     if(
eles[i].objName!=null)
     {
      
alert(eles[i].objName+"不可以为空");
     }
     else
     {
      
alert("该文本框为必输字段");
     }
     
eles[i].focus();     
     
event.returnValue=false;     
     return
false;   
    }
   }  
   switch(
sType)
   {
                
//整数
    
case "int":
     if(!
validInt(eles[i]))
     {
      
event.returnValue=false;
      return
false;
     }
     break;
    
//小数
    
case "float":
     if(!
validFloat(eles[i]))
     {
      
event.returnValue=false;
      return
false;
     }
     break;
    
//字符串
    
case "string":
     if(!
validString(eles[i]))
     {
      
event.returnValue=false;
      return
false;
     }
     break;
    
//日期
    
case "date":
     if(!
validDate(eles[i]))
     {
      
event.returnValue=false;
      return
false;
     }
     break;
    
//邮件
    
case "email":
     if(!
validEmail(eles[i]))
     {
      
event.returnValue=false;
      return
false;
     }
     break;
    
//单选按钮
    
case "radio":
     if(!
validRadio(eles[i]))
     {
      
event.returnValue=false;
      return
false;
     }
     break;
    
//复选按钮
    
case "checkbox":
     if(!
validBox(eles[i]))
     {
      
event.returnValue=false;
      return
false;
     }
     break;
    
//下拉列表框
    
case "select":
     if(!
validSelect(eles[i]))
     {
      
event.returnValue=false;
      return
false;
     }
     break;
    
//列表框
    
case "list":
     if(!
validList(eles[i]))
     {
      
event.returnValue=false;
      return
false;
     }
     break;
            }
        }
    }
event.returnValue=true;
return
true;
}
/***检查是否为数字***/
function checkNumber()
{
var
ele=event.srcElement;
if(
ele.valueType!=null)
{
  if(
ele.mustInput!=null && ele.mustInput=="true")
  {
   if(
trim(ele.value)=="")
   {
    if(
ele.objName!=null)
    {
     
alert(ele.objName+"不可以为空");
    }
    else
    {
     
alert("该文本框为必输字段");
    }
    
ele.focus();     
    return
false;   
   }
  }
  if(
ele.valueType=="int")
   
checkInt(ele);
  else if(
ele.valueType=="float")
   
checkFloat(ele);
  else
   ;
}
return
true;
}


/***检查是否为整数***/
function checkInt(ele)
{
if(!
isInt(ele.value))
{
  
alert("请输入有效整数");
  
ele.focus();
  return
false;
}
else
{
  if(
ele.maxInput!=null && !isNaN(ele.maxInput))
   if(
parseInt(ele.maxInput)<parseInt(ele.value))
   {
    
alert("您输入的"+ convertNullToSpace(ele.objName)+"值应该小于"+ele.maxInput);        
    
ele.focus();
    return
false;
   }      
  if(
ele.minInput!=null && !isNaN(ele.minInput))
   if(
parseInt(ele.minInput)>parseInt(ele.value))
   {
    
alert("您输入的"+ convertNullToSpace(ele.objName)+"值应该大于"+ele.minInput);
    
ele.focus();
    return
false;
   }   
}
return
true;
}

/***检查是否为小数***/
function checkFloat(ele)
{
    if(
isNaN(ele.value))
    {
  
alert("请输入有效数字");
  
ele.focus();
  return
false;
    }
else
{
        if(
ele.decimalLen!=null && !checkDecimal(ele.value,ele.decimalLen))
     {
   
alert("您输入的"+convertNullToSpace(ele.objName)+"值小数位最多为"+ele.decimalLen);
   
ele.focus();     
   return
false;
        }
  if(
ele.maxInput!=null && !isNaN(ele.maxInput))
   if(
parseInt(ele.maxInput)<parseInt(ele.value))
   {
    
alert("您输入的"+ convertNullToSpace(ele.objName)+"值应该小于"+ele.maxInput);          
    
ele.focus();
    return
false;
   }      
  if(
ele.minInput!=null && !isNaN(ele.minInput))
   if(
parseInt(ele.minInput)>parseInt(ele.value))
   {
    
alert("您输入的"+ convertNullToSpace(ele.objName)+"值应该大于"+ele.minInput);
    
ele.focus();
    return
false;
   }   
}
return
true;
}

/***检查是否为字符串***/
function checkString()
{
var
ele=event.srcElement;
if(
ele.valueType!=null)
{
  if(
ele.mustInput!=null && ele.mustInput=="true")
  {
   if(
trim(ele.value)=="")
   {
    if(
ele.objName!=null)
    {
     
alert(ele.objName+"不可以为空");
    }
    else
    {
     
alert("该文本框为必输字段");
    }
    
ele.focus();     
    return
false;   
   }
  }
  if(
ele.stringLen!=null && !isNaN(ele.stringLen))
  {
   var
value=new String(ele.value);
   if(
value.length>parseInt(ele.stringLen))
   {
    
alert("您输入的"+convertNullToSpace(ele.objName)+"最大长度为"+ele.stringLen);
    
ele.focus();     
    return
false;
   }
  }
}
return
true;
}
/***检查是否为日期格式***/
function checkDate()
{
var
ele=event.srcElement;
if(
ele.valueType!=null)
{
  if(
ele.mustInput!=null && ele.mustInput=="true")
  {
   if(
trim(ele.value)=="")
   {
    if(
ele.objName!=null)
    {
     
alert(ele.objName+"不可以为空");
    }
    else
    {
     
alert("该文本框为必输字段");
    }
    
ele.focus();     
    return
false;   
   }
  }
  if(!
isDate(ele.value))
  {
   
alert("请输入有效日期(yyyy-mm-dd)");
   
ele.focus();
   return
false;
  }
}
return
true;
}

/***检查是否为电子邮箱***/
function checkEmail()
{
var
ele=event.srcElement;
if(
ele.valueType!=null)
{
  if(
ele.mustInput!=null && ele.mustInput=="true")
  {
   if(
trim(ele.value)=="")
   {
    if(
ele.objName!=null)
    {
     
alert(ele.objName+"不可以为空");
    }
    else
    {
     
alert("该文本框为必输字段");
    }
    
ele.focus();     
    return
false;   
   }
  }
  if(!
isEmail(ele.value))
  {
   
alert("请输入有效邮箱");
   
ele.focus();
   return
false;
  }
}
return
true;
}
/***验证是否为整数***/
function validInt(ele)
{
if(!
isInt(ele.value))
{
  
alert("请输入有效整数");
  
ele.focus();
  return
false;
}
else
{
  if(
ele.maxInput!=null && !isNaN(ele.maxInput))
   if(
parseInt(ele.maxInput)<parseInt(ele.value))
   {
    
alert("您输入的"+ convertNullToSpace(ele.objName)+"值应该小于"+ele.maxInput);        
    
ele.focus();
    return
false;
   }      
  if(
ele.minInput!=null && !isNaN(ele.minInput))
   if(
parseInt(ele.minInput)>parseInt(ele.value))
   {
    
alert("您输入的"+ convertNullToSpace(ele.objName)+"值应该大于"+ele.minInput);
    
ele.focus();
    return
false;
   }   
}
return
true;
}

/***验证是否为小数***/
function validFloat(ele)
{
    if(
isNaN(ele.value))
    {
  
alert("请输入有效数字");
  
ele.focus();
  return
false;
    }
else
{
        if(
ele.decimalLen!=null && !checkDecimal(ele.value,ele.decimalLen))
     {
   
alert("您输入的"+convertNullToSpace(ele.objName)+"值小数位最多为"+ele.decimalLen);
   
ele.focus();     
   return
false;
        }
  if(
ele.maxInput!=null && !isNaN(ele.maxInput))
   if(
parseInt(ele.maxInput)<parseInt(ele.value))
   {
    
alert("您输入的"+ convertNullToSpace(ele.objName)+"值应该小于"+ele.maxInput);          
    
ele.focus();
    return
false;
   }      
  if(
ele.minInput!=null && !isNaN(ele.minInput))
   if(
parseInt(ele.minInput)>parseInt(ele.value))
   {
    
alert("您输入的"+ convertNullToSpace(ele.objName)+"值应该大于"+ele.minInput);
    
ele.focus();
    return
false;
   }   
}
return
true;
}

/***验证是否为字符串***/
function validString(ele)
{
if(
ele.stringLen!=null && !isNaN(ele.stringLen))
{
  var
value=new String(ele.value);
  if(
value.length>parseInt(ele.stringLen))
  {
   
alert("您输入的"+convertNullToSpace(ele.objName)+"最大长度为"+ele.stringLen);
   
ele.focus();     
   return
false;
  }
}
return
true;
}
/***验证是否为日期格式***/
function validDate(ele)
{
if(!
isDate(ele.value)&&ele.value!="")
{
  
alert("请输入有效日期(yyyy-mm-dd)");
  
ele.focus();
  return
false;
    }
return
true;
}

/***验证是否为电子邮箱***/
function validEmail(ele)
{
if(!
isEmail(ele.value))
{
  
alert("请输入有效邮箱");
  
ele.focus();
  return
false;
    }
return
true;
}
/***验证单选按钮是否需要选择***/
function validRadio(ele)
{
//var rads = document.getElementsByName(ele.name);
    
eval("var rads="+name+"."+ele.name);
var
selectCount=0;
for(var
i=0;i<rads.length;i++)
    {
  if(
rads[i].checked)
        {
   
selectCount++;
        }
    }

if(
ele.mustSelect!=null && ele.mustSelect)
{
  if(
selectCount==0)
  {
   
alert("请选择"+convertNullToSpace(ele.objName));
   
ele.focus();     
   return
false;
  }
}
return
true;
}
/***验证复选按钮是否需要选择***/
function validBox(ele)
{
//var rads = document.getElementsByName(ele.name);
    
eval("var chks="+name+"."+ele.name);
var
selectCount=0;
for(var
i=0;i<chks.length;i++)
    {
  if(
chks[i].checked)
        {
   
selectCount++;
        }
    }
if(
ele.minSelect!=null && !isNaN(ele.minSelect))
{
  if(
selectCount<parseInt(ele.minSelect))
  {
   
alert(convertNullToSpace(ele.objName)+"至少选择"+ele.minSelect+"项");
   
ele.focus();     
   return
false;
  }
}
if(
ele.maxSelect!=null && !isNaN(ele.maxSelect))
{
  if(
selectCount>parseInt(ele.maxSelect))
  {
   
alert(convertNullToSpace(ele.objName)+"至多选择"+ele.maxSelect+"项");
   
ele.focus();     
   return
false;
  }
}
return
true;
}
/***验证下拉列表框是否需要选择***/
function validSelect(ele)
{
//var rads = document.getElementsByName(ele.name);
if(ele.mustSelect!=null && ele.mustSelect)
{
  if(
ele.selectedIndex==0)
  {
   
alert("请选择"+convertNullToSpace(ele.objName));
   
ele.focus();     
   return
false;
  }
}
return
true;
}
/***验证列表框的选择项数***/
function validList(ele)
{
//var rads = document.getElementsByName(ele.name);
    
var selectCount=0;
for(var
i=0;i<ele.options.length;i++)
    {
        if(
ele.options[i].selected)
        {
            
selectCount++;
        }
    }
alert(selectCount);
if(
ele.minSelect!=null && !isNaN(ele.minSelect))
{
  if(
selectCount<parseInt(ele.minSelect))
  {
   
alert(convertNullToSpace(ele.objName)+"至少选择"+ele.minSelect+"项");
   
ele.focus();     
   return
false;
  }
}
if(
ele.maxSelect!=null && !isNaN(ele.maxSelect))
{
  if(
selectCount>parseInt(ele.maxSelect))
  {
   
alert(convertNullToSpace(ele.objName)+"至多选择"+ele.maxSelect+"项");
   
ele.focus();     
   return
false;
  }
}
return
true;
}
/***判断是否为整数***/
function isInt(s)
{
var
patrn=/^[-,+]{0,1}[0-9]{0,}$/;
if (!
patrn.exec(s))
   return
false;
return
true;
}
/***判断是否为数字***/
function isNumber(s)
{
var
patrn=/^[-,+]{0,1}[0-9]{0,}[.]{0,1}[0-9]{0,}$/;
if (!
patrn.exec(s))
   return
false;
return
true;
}
/***判断是否为日期***/
function isDate(str)
{
var
r = str.match(/^(
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /home/ftp/n/q/h/6/qh663/php/show.php on line 46
d{1,4})(-|
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /home/ftp/n/q/h/6/qh663/php/show.php on line 46
/)(
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /home/ftp/n/q/h/6/qh663/php/show.php on line 46
d{1,2})
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /home/ftp/n/q/h/6/qh663/php/show.php on line 46
2(
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /home/ftp/n/q/h/6/qh663/php/show.php on line 46
d{1,2})$/);
if(
r==null)
{
  return
false;
}
var
d= new Date(r[1], r[3]-1, r[4]);
if(!(
d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]))
{  
  return
false;
}
return
true;
}
/***判断是否为邮箱***/
function isEmail(str)
{
if(
str.match(/[
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /home/ftp/n/q/h/6/qh663/php/show.php on line 46
w-]+@{1}[
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /home/ftp/n/q/h/6/qh663/php/show.php on line 46
w-]+
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /home/ftp/n/q/h/6/qh663/php/show.php on line 46
.{
1}
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /home/ftp/n/q/h/6/qh663/php/show.php on line 46
w{2,4}(
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /home/ftp/n/q/h/6/qh663/php/show.php on line 46
.{
0,1}
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /home/ftp/n/q/h/6/qh663/php/show.php on line 46
w{2}){0,1}/ig)!=str)
  return
false;
else
  return
true;
}
/***将NULL转化为空格,用于显示对象名称***/
function convertNullToSpace(paramValue)
{
  if(
paramValue==null)
    return
"";
  else
    return
paramValue;
}
/***检查小数位数***/
function checkDecimal(num,decimalLen)
{
  var
len = decimalLen*1+1;
  if(
num.indexOf('.')>0)
  {
    
num=num.substr(num.indexOf('.')+1,num.length-1);  
    if ((
num.length)<len)
{
      return
true;
    }
else
{
      return
false;
    }
  }
  return
true;
}
/***去除空格***/
function trim(str)
{
if (
str.length > 0)
{
  while ((
str.substring(0,1) == " ") && (str.length > 0))
  {
   
str = str.substring(1,str.length);
  }
  while (
str.substring(str.length-1,str.length) == " ")
  {
   
str = str.substring(0,str.length-1);
  }
}
return
str;
}




另外修改一下日期验证的一个BUG
/***检查是否为日期格式***/
function checkDate()
{
var
ele=event.srcElement;
if(
ele.valueType!=null)
{
if(
ele.mustInput!=null && ele.mustInput=="true")
{
if(
trim(ele.value)=="")
{
if(
ele.objName!=null)
{
alert(ele.objName+"不可以为空");
}
else
{
alert("该文本框为必输字段");
}
ele.focus();
return
false;
}
}
if(!
isDate(ele.value)&&trim(ele.value)!="")
{
alert("请输入有效日期(yyyy-mm-dd)");
ele.focus();
return
false;
}
}
return
true;
}

/***验证是否为日期格式***/
function validDate(ele)
{
if(!
isDate(ele.value)&&trim(ele.value)!="")
{
alert("请输入有效日期(yyyy-mm-dd)");
ele.focus();
return
false;
}
return
true;
}


再添加一项“您两次输入的密码不一致,请重新输入”这一个密码确认校验

稍微修改一下即可,其实这个表单验证函数最大的优点就是可扩展性,你可以随意补充其功能。
十、密码
(password)
定义:
valueType="password"
属性:
objName 对象名称(字符串)
mustInput 必输项(true/false)
minLen 最小值(数字)
maxLen 最大值(数字)
举例:
<
input name="test" valueType="password" objName="密码" minLen="2" maxLen="5">

//checkForm函数加入下面这一段
//密码
case "password":
if(!
validPassword(eles[i]))
{
event.returnValue=false;
return
false;
}
break;


//再加入下面的函数
/***验证密码是否输入一致***/
function validPassword(ele)
{
var
pwds =