表单验证

/* 通用前端校验函数(请不断扩充),主要提供对于要提交的表单内容的检查,检查内容主要包括:必输项、
 * 数据类型、数据长度、文件大小等
 * 使用方法:
 *   1. 需要校验的页面通过<script src="formcheck.js">包含本文件,具体路径各项目制订。
 *   2. 校验规则的运用,举例说明:
        <input id="Y_str" name="address" type="text" size="15" title="地址" maxlength="100">
        以上例子是对一个地址输入框的校验,详细说明如下:
        id - 放置了必输项和数据类型的校验规则,Y表示必输,N表示不必输;str表示是字符串类型,
             更多的校验规则如下(按必输举例,不必输就是将Y换成N):
              Y_str ---- 必输、字符串
              Y_int ---- 必输、数字格式
              Y_fla ---- 必输、浮点格式
              Y_dat ---- 必输、日期格式(YYYY-MM-dd)
              Y_mal ---- 必输、email格式(xxx@xxx.com)
              Y_fil ---- 必输、文件格式(针对input type=file的输入框)
        title - 放置了本输入框的友好名称,报警时使用。
        maxlength - 放置了输入框的最大长度,本formcheck已经考虑了中文问题,所以比如:maxlength=50
                    的情况,则纯英文字符能最多输入50个,而中文最多输入25个。

 *   3. 激活校验机制,有两种方法:
        1)如果你的form是通过submit类型的按钮触发提交,你可以如此激活:
            在form标签中加入: onsubmit="return checkSubmit(this)"
        2)如果你的form是通过javascript代码触发提交,则你必须使用类似如下语句激活:
            if checkSubmit(表单名) 表单名.submit();
 */


var hasclick=false;
var oPopup = window.createPopup();

function checkSubmit(form){

if (hasclick){
 return false;
}else{
 hasclick=true;

}
  //首先判断,然后改名字

 var p1=/(^/s*)|(/s*$)/g
 var p2=/(^[  ]*)|([  ]*$)/g

 var fso;
 var file;
 checkactivex=true;
 var totalcheckfilesize=0;
 var strtitle="";
 var strrule="";
 var str_warn="";

    for(i=0;i<form.length;i++)
    {
       if((form[i].tagName.toUpperCase()=="INPUT" && form[i].type.toUpperCase()!="BUTTON")||(form[i].tagName.toUpperCase()=="TEXTAREA")||(form[i].tagName.toUpperCase()=="SELECT")){
  form[i].value=form[i].value.replace(p1,"");
  form[i].value=form[i].value.replace(p2,"");
 }
 str_warn="";
 //检测判断条件,根据类型不同可以修改---如果是input类型,textArea类型
 //使用方法:
 //在需要校验的form中对象名,采用规范的对象命名
 //例如:Y_int_mustint   ---->   代表 此处校验:Y代表不能为空,int 代表必须是int类型
 //     N_fla_mustfla   ---->   代表 此处校验:N代表可以为空,fla 如果不为空必须是 float类型
 //     N_dat_mustdate  ---->   代表 此处校验:N代表可以为空,dat 如果不为空必须是 日期类型(格式采用统一格式:YYYY-MM-DD)
 //     Y_mal_sdfsdfsd  ---->   代表 此处校验:Y代表不能为空,mal 代表必须是email类型
 //     Y_fil_sdfsdfsd  ---->   代表 此处校验:Y代表不能为空,fil 代表必须是file“上传”类型
 //     Y_str_xxxxxxx   ---->   代表 此处校验:Y代表不能为空,str 代表必须是String类型
 //     Y_net_sdfsdfsd  ---->   代表 此处校验:Y代表不能为空,net 代表必须是输入的网络连接类型
    if((((form[i].tagName.toUpperCase()=="INPUT") && (form[i].type.toUpperCase()=="TEXT" || form[i].type.toUpperCase()=="PASSWORD" || form[i].type.toUpperCase()=="FILE")) || (form[i].tagName.toUpperCase()=="TEXTAREA")||(form[i].tagName.toUpperCase()=="SELECT")) && (form[i].title!=""))
    {
  //alert(form[i].title+form[i].value.length+form[i].value.indexOf("Y"));


    //取得判断类型和提示
    strtitle="";
    strrule="";
    if(form[i].title.indexOf("Y_")==0 || form[i].title.indexOf("N_")==0){
     strtitle= form[i].title.substring(6,form[i].title.length);
     strrule= form[i].title.substring(2,5).toUpperCase();
    }else{
     strtitle= form[i].title;
    }
    if(form[i].name.indexOf("Y_")==0 || form[i].name.indexOf("N_")==0){
     strrule= form[i].name.substring(2,5).toUpperCase();
    }
    if(form[i].id.indexOf("Y_")==0 || form[i].id.indexOf("N_")==0){
     strrule= form[i].id.substring(2,5).toUpperCase();
     
    }
  //  alert(strrule);
    //取得结束

    //首先判断所有元素有Y的不能为空
    if(form[i].name.indexOf("Y_")==0 || form[i].title.indexOf("Y_")==0 || form[i].id.indexOf("Y_")==0)
    {

                      if(form[i].value.length<1){
                        str_warn=strtitle+"不能为空!";
                        alert(str_warn);
                        form[i].focus();
                        return checkreturn(false);
                      }
    }
    //然后填写数据的判断类型匹配
    if(form[i].value.length>0)
   {


     //判断3-5位的格式
     if(strrule=="INT")//int数字校验
     {
     if(!isInt(form[i].value))
     {
      str_warn=strtitle+"格式不对,必须是整形数值!";
                          alert(str_warn);
      form[i].focus();
             return checkreturn(false);
     }
    }
    if(strrule=="FLA")//float数字校验
     {
     if(!isFloat(form[i].value))
     {
      str_warn=strtitle+"浮点格式错误,正确的格式是整数位7位以下,小数点后2位以内!";
                          alert(str_warn);
      form[i].focus();
             return checkreturn(false);
     }
    }
    if(strrule=="DAT")//date校验
     {
     if(!isDate(form[i].value))
     {
      str_warn=strtitle+"格式不对,必须是日期型数据!/n格式为:YYYY-MM-DD";
                          alert(str_warn);
      form[i].focus();
             return checkreturn(false);
     }
    }
    if(strrule=="MAL")//mail校验
     {
     if(!isMailAddress(form[i].value))
     {
      str_warn=strtitle+"格式不对,必须是正确的邮件地址!/n格式为:sina@sina.com";
                          alert(str_warn);
      form[i].focus();
             return checkreturn(false);
     }
    }
    if(strrule=="FIL")//文件校验,包括大小和路径的正确性
     {


     try{
      //将全部文件大小和与form里的totalsize属性提供的大小比较
      //if ((navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 6 )){

       if (form[i].filetype!=null){
        if (checkfiletype(form[i].value,form[i].filetype)!=true){
         str_warn=strtitle+"选择的文件类型不正确,请重新选择。";
                             alert(str_warn);
         form[i].focus();
         return checkreturn(false);
        }
       }

       if (form.totalsize!=null && isInt(form.totalsize)){
        returnsize = getfilesize(form[i].value);
        if (returnsize<0)
        {
         form[i].focus();
         return checkreturn(false);
        }else{
         totalcheckfilesize=totalcheckfilesize+returnsize;
        }
        if (totalcheckfilesize>form.totalsize){
         alert("上传文件不允许超过"+form.totalsize/1000000+"M。");
         return checkreturn(false);
        }
       }
      //}else{
      // alert(navigator.appName);
      // alert(navigator.appVersion);
      //}
     }catch(e){
      alert(e.message);
      continue;
     }
    }
    if(strrule=="NET")//文件校验,包括大小和路径的正确性
     {

     if (form[i].filetype!=null){
      if (checkfiletype(form[i].value,form[i].filetype)!=true){
       alert(strtitle+"选择的文件类型不正确,请重新选择。");
       form[i].focus();
       return checkreturn(false);
      }
     }
    }

                                //判断最大录入长度限制
                                var maxLength =null;
                                maxLength = form[i].maxLength;
                                if (maxLength==null) maxLength = form[i].maxlength;
                                if (maxLength!=null && StrLen(form[i].value)>maxLength) {
                                        str_warn=strtitle+"录入的字数不能超过"+maxLength/2+"个汉字("+maxLength+"个字符)";
                                        alert(str_warn);
                                        form[i].focus();
                          return checkreturn(false);
                                }

                                if (ilegalChar(form[i].value)) {
                                         str_warn = strtitle+"包含有非法字符,例如 "+ilegalChars;
                                         alert(str_warn);
                                         form[i].focus();
                                         return checkreturn(false);
                                }
   }

 }
 

  }//end for

 

 //改名字
 for(i=0;i<form.length;i++){
  //凡是这种类型的
  if((((form[i].tagName.toUpperCase()=="INPUT") && (form[i].type.toUpperCase()=="TEXT" || form[i].type.toUpperCase()=="PASSWORD" || form[i].type.toUpperCase()=="FILE")) || (form[i].tagName.toUpperCase()=="TEXTAREA")||(form[i].tagName.toUpperCase()=="SELECT")) && (form[i].title!=""))
                {
                         if (form[i].name.indexOf("Y_")==0 || form[i].name.indexOf("N_")==0)
                         //把Y_str_sdfsdf 转换成 sdfsdf

                  form[i].name=form[i].name.substring(6,form[i].name.length);
                }
 }
 return checkreturn(true);
}
function checkreturn(checkvalue){
 if (checkvalue==true){
     document.xwaitting = 100;
  //window.open("/js/waitting.htm","wait","toolbar=no,status=no,menubar=no,scrollbars=no,width=250,height=165,top=330,left=400");
  //setTimeout("hasclick=false",10000);
  var oPopupBody = oPopup.document.body;
  var height=50;var width=240;
  var x=screen.width/2-135;var y=screen.height/2-55;
  //oPopupBody.style.background  = "running.gif";
  //oPopupBody.style.border = "solid blue 3px";
  oPopupBody.innerHTML="<img src='/js/running.gif' border=0>";
  oPopup.show(x, y, width, height);
  //setTimeOut这句话是为了防止popUp出来的窗口不能自动消失
  setTimeout("oPopup.hide()",1000);
  hasclick=false;
  return true;

 }else{
  hasclick=false;
  return false;
 }
}
//检查整形数值的函数
function isInt(inputVal) {
   inputStr = inputVal.toString()
   for (var i = 0; i < inputStr.length; i++) {
          var oneChar = inputStr.charAt(i)
         if (oneChar < "0" || oneChar > "9") {
              return false;
        }
   }
return true;
}
//检查浮点型数值的函数
function isFloat(inputVal) {
  inputStr = inputVal.toString()
   for (var i = 0; i < inputStr.length; i++) {
         var oneChar = inputStr.charAt(i)
         if ((oneChar < "0" || oneChar > "9") && oneChar!=".") {
              return false;
        }
   }
   var numberArray = new Array();
   var intLength = 0;
   var decLength = 0;
   numberArray = inputStr.split(".");
   if (numberArray.length<=2) {
     if (numberArray[0]!=null) {
       intLength = numberArray[0].length;
       if (numberArray[1]!=null) {
         decLength = numberArray[1].length;
       }
       if (intLength>7) return false
       else if ((numberArray[0] - 8359999)>0) return false;
       if (decLength>2) return false;
     } else return false;

   } else return false;

  return true;
}
//检查日期型数据
function isDate(sDate)
{
 var iaMonthDays = [31,28,31,30,31,30,31,31,30,31,30,31]
 var iaDate = new Array(3)
 var year, month, day

 if (arguments.length != 1) return false
 iaDate = sDate.toString().split("-")
 if (iaDate.length != 3) return false
 if (iaDate[1].length !=2  || iaDate[2].length != 2) return false

 year = parseFloat(iaDate[0])
 month = parseFloat(iaDate[1])
 day=parseFloat(iaDate[2])
 if (!isInt(year) || !isInt(month) || !isInt(day)) return false;

 if (year < 1900 || year > 2100) return false
 if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) iaMonthDays[1]=29;
 if (month < 1 || month > 12) return false
 if (day < 1 || day > iaMonthDays[month - 1]) return false
 return true
}
//校验邮件
function isMailAddress(strMail){
   if(strMail.indexOf('@')<1){
   return false;
   }
   if(strMail.indexOf('.')<1){
   return false;
   }
   if (strMail.indexOf('@')>strMail.lastIndexOf('.')){
   return false;
   }
   return true;
}

//检查指定名称的所有的RadioButton中是否有一个被选中
//参数是radiobutton的name
//如果有一个被选中返回true,如果没有一个被选中的返回false
function isRadioChecked(radioname) {
 //判断是否存在指定名称的radiobutton
 if(radioname==null){
  return false;
 }
 //如果只有一个radiobutton,则直接判断是否被选中
    if(radioname.checked){
     return true;
 }
 //如果有一组的radiobutton,则循环判断
 if (radioname.length>0) {
  for(var i=0;i<radioname.length;i++){
    if(radioname[i].checked){
    return true;
    }
  }
 }
 return false;
}

//判断字符串的长度,可以处理汉字
/*
function StrLen(sString)
{
  var sStr,iCount,i,strTemp ;

  iCount = 0 ;
  sStr = sString.split("");
  for (i = 0 ; i < sStr.length ; i ++)
  {
  strTemp = escape(sStr[i]);
  if (strTemp.indexOf("%u",0) == -1) // 表示是汉字
  {
  iCount = iCount + 1 ;
  }
  else
  {
  iCount = iCount + 2 ;
  }
  }
  return iCount ;
}*/
function StrLen(sString) {
    var j = 0;
    var s = sString;
    if (s=="") return j;
    for (var i=0; i<s.length; i++)
    {
      if (s.substr(i,1).charCodeAt(0)>255) j = j + 2;
      else j++
    }

    return j;
}

var ilegalChars = "' , /"";

function ilegalChar(value) {
  if (value.indexOf("'")>-1) return true;
  if (value.indexOf("/"")>-1) return true;
  return false;
}

//检测文件大小
function getfilesize(formobject)
{
 if (document.all)
 {
  if (checkactivex)
  {
   try{
    fso = new ActiveXObject('Scripting.FileSystemObject');
   }catch(ex){
    alert("您的浏览器设置不支持ActiveX,请启用浏览器的ActiveX支持。");
    checkactivex=false;
    return 0;
   }
  }
  if (checkactivex)
  {

   try{
    file = fso.GetFile(formobject);
    return file.Size;
   }catch(e){
    alert(e.message);
         if(e.message=="文件未找到"){
          return -1;
         }else{
          return 0;
         }
   }
  }else{
   return 0;
  }
 }else{
  return 0;
 }
}
//检测文件类型
function checkfiletype(formobject,filetypestr)
{
 //filetypestr=filetypestr.toLowerCase();
 if (formobject.indexOf(".")<0){
  if (filetypestr==null){
   return true;
  }else if (filetypestr.substring(0,1)=="-"){
   return true;
  }else{
   return false;
  }
 }else{
  extname=formobject.substring(formobject.lastIndexOf(".")+1,formobject.length).toLowerCase();
  if (filetypestr!=null){
   if (filetypestr.substring(0,1)=="+"){
    if(filetypestr.indexOf(extname)>1){
     return true;
    }else{
     return false;
    }
   }
   if (filetypestr.substring(0,1)=="-"){
    if(filetypestr.indexOf(extname)>1){
     return false;
    }else{
     return true;
    }
   }
  }else{
   return true;
  }
 }
}

function drawschedule(useday){
 var daywidth=10;
 var dayheight=20;
 var maxwidth=100
 var usecolor;
 var printword;
 var usewidth;
 if (useday>0){
  usecolor="#00FF00";
  if (useday==1){
   usecolor="#FFFF00";
  }
  printword="还剩"+useday+"天";
  usewidth=useday*daywidth;
  if (useday*daywidth>maxwidth){
   usewidth=maxwidth;
  }
 }
 if (useday==0){
  usecolor="#FFFF00";
  printword="没有剩余时间";
  usewidth=maxwidth;
 }
 if (useday<0){
  useday=0-useday;
  usecolor="#FF0000";
  printword="超时"+useday+"天";
  usewidth=useday*daywidth;
  if (useday*daywidth>maxwidth){
   usewidth=maxwidth;
  }
 }
 document.write("<div style=/"position:absolute;padding-left: 15px;padding-top: 3px;/" align=center width=100>"+printword+"</div>");
 document.write("<table border=/"1/" cellpadding=/"0/" cellspacing=/"0/" style=/"border-collapse: collapse/" width=/""+usewidth+"/" bordercolorlight=/"#808080/" bordercolordark=/"#C0C0C0/" height=/""+dayheight+"/">");
 document.write("  <tr>                                                                                                                                                                                               ");
 document.write("    <td width=/""+usewidth+"/"  height=/""+dayheight+"/" bgcolor=/""+usecolor+"/" valign=top></td>                                                                                                                     ");
 document.write("  </tr>                                                                                                                                                                                              ");
 document.write("</table>                                                                                                                                                                                             ");
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值