Topic: 【原创】一个使用相对简单的客户端表单完整和合法性校验的JS文件

  Print this page

1.【原创】一个使用相对简单的客户端表单完整和合法性校验的JS文件 Copy to clipboard
Posted by: jimshen
Posted on: 2004-07-01 18:55


/*
作者:沈健(常熟理工学院计算机系),jimshen@21cn.com
编写本JavaScript脚本的原因在于为表单验证提供一个便于使用的可重用的代码
本代码的版权归作者所有,你可以在任何场合使用本代码,但必须保留该代码的版权声明
在使用过程中遇到的问题或者任何建议可通过电子邮件反馈给作者
*/

//类型模式,用以正则表达式检查表单内容是否满足要求
var ALPHABETIC=0;    //只能使用英文字母
var ALPHANUM=1;      //只能使用英文字母、数字和下划线
var PASSWORD=2;      //能够使用除'、"以及空白字符以外的其他字符
var EMAIL=3;      //符合Email地址格式(用户名@域名/IP地址)
var NOLIMIT=4;      //无限制,可使用任何字符
var NORETURN=5;      //除换行(\n)之外的任何字符
            //缺省情况为ALPHABETIC

//错误代号
var EMPTY=0;      //表单元素(文本类)输入为空
var TOO_SHORT=1;    //文本长度太短
var TOO_LONG=2;      //文本长度太长
var ILLEGLE=3;      //文本含有非法字符
var WRONG_EMAIL=4;    //电子邮件地址格式错误
var NO_SELECT=5;    //表单元素(单选、复选按钮等)未选择
var TOO_FEW_SELECT=6;  //复选按钮组或者复选列表框选择的数据项数量太少
var TOO_MANY_SELECT=7;  //复选按钮组或者复选列表框选择的数据项数量太多

//产生警告信息
//formName: 表单元素名称
//errorCode: 错误代号
//number: 可选的数量词,表示文本长度或者选项个数需要符合的条件
function warning(formName,errorCode,number){
  var _msg;
  var errorMsg=new ArrayMusical Note;
  errorMsg[0]="为空,请填写完整!";
  errorMsg[1]="长度不符合要求!长度不能小于";
  errorMsg[2]="长度不符合要求!长度不能大于";
  errorMsg[3]="包含非法的字符!请参照表单填写说明进行修改!";
  errorMsg[4]="电子邮件地址不正确,请填写正确!";
  errorMsg[5]="没有选择,请选择!";
  errorMsg[6]="选择的项数不能少于";
  errorMsg[7]="选择的项数不能多于";
  if(number==null)
    number="";
  _msg=formName+errorMsg[errorCode]+number;
  window.alert(_msg);
  return false;
}

//验证表单元素内容是否符合要求,如果满足返回true,否则返回false
//formObj: 表单元素
//formName: 表单名称,用于显示在错误信息中,应提供用户能够理解的文字
//contentType: 类型模式,用以正则表达式检查,使用预定义的符号,对于文本类以外的元素无意义,默认为只允许英文字母
//minLen: 可选,文本最小长度,对于单选按钮无意义,对于复选按钮组表示最少选择的数量
//maxLen: 可选,文本最大长度,对于单选按钮无意义,对于复选按钮组表示最多选择的数量
//如果不提供minLen和maxLen则不检查长度或个数

//各种检查格式:
// 文本 validate(form1.formname,"文字描述",ALPHANUM,最小长度,最大长度)
// 密码 validate(form1.formname,"文字描述",PASSWORD,最小长度,最大长度)
// 文本-电子邮件 validate(form1.email,"电子邮件",EMAIL)
// 文本域 validate(form1.formname,"文字描述",NOLIMIT,最小长度,最大长度)
// 单选按钮 validate(form1.formname,"文字描述")
// 单个复选按钮 validate(form1.formname,"文字描述")
// 复选按钮组 validate(form1.formname,"文字描述","",最少个数,最大个数)
// 下拉列表 validate(form1.formname,"文字描述")
// 单选列表框 validate(form1.formname,"文字描述")
// 多选列表框 validate(form1.formname,"文字描述","",最少个数,最大个数)

function validate(formObj,formName,contentType,minLen,maxLen){
  var str;
  var regex;
  var formType=formObj.type;
  if(formType==null)
    formType=formObj[0].type;
  var count;
  if(contentType==null)
    contentType=ALPHABETIC;
  switch(contentType){
    case ALPHABETIC:
      regex=/^[A-Za-z]*$/;
      break;
    case ALPHANUM:
      regex=/^[\w]*$/;
      break;
    case PASSWORD:
      regex=/^[^\'\"\s]*$/;
      break;
    case NOLIMIT:
      regex=/^[\u0000-\uffff]*$/;
      break;
    case NORETURN:
      regex=/^.*$/;
      break;
    case EMAIL:
      str=formObj.value;
      if(str==null || str==""){
        return warning(formName,EMPTY);
      }
      if(!checkEmail(str)){
        return warning(formName,WRONG_EMAIL);
      }else
        return true;
      break;
    default:
      regex=/^[\w]*$/;
      break;
  }
  switch(formType){
    case "text":
    case "password":
    case "textarea":
    case "file":
      str=formObj.value;
      if(str==null || str==""){
        return warning(formName,EMPTY);
      }
      if(minLen!=null && minLen!=""){
        if(str.length<minLen){
          return warning(formName,TOO_SHORT,minLen);
        }
      }
      if(maxLen!=null && maxLen!=""){
        if(str.length>maxLen){
          return warning(formName,TOO_LONG,maxLen);
        }
      }
      if(!check(str,regex)){
        return warning(formName,ILLEGLE);
      }
      break;
    case "radio":
    case "checkbox":
      count=readButton(formObj);
      if(count==0){
        return warning(formName,NO_SELECT);
      }
      if(minLen!=null && minLen!=""){
        if(count<minLen){
          return warning(formName,TOO_FEW_SELECT,minLen);
        }
      }
      if(maxLen!=null && maxLen!=""){
        if(count>maxLen){
          return warning(formName,TOO_MANY_SELECT,maxLen);
        }
      }
      break;
    case "select-one":
      if(readSingle(formObj)<0){
        return warning(formName,NO_SELECT);
      }
      break;
    case "select-multiple":
      count=readMultiple(formObj);
      if(count==0){
        return warning(formName,NO_SELECT);
      }
      if(minLen!=null && minLen!=""){
        if(count<minLen){
          return warning(formName,TOO_FEW_SELECT,minLen);
        }
      }
      if(maxLen!=null && maxLen!=""){
        if(count>maxLen){
          return warning(formName,TOO_MANY_SELECT,maxLen);
        }
      }
      break;
  }
  return true;
}

//读取单选按钮、复选按钮、复选按钮组的数据,返回选中的选项的个数
//如果返回为0,表示未选择
function readButton(formObj){
  var count=0;
  var len=formObj.length;
  if(len!=null){
    for(i=0;i<formObj.length;i++){
      if(formObj[i].checked)
        count++;
    }
  }else if(formObj.checked)
    count=1;
  return count;
}

//返回下拉列表、单选列表中被选中数据的编号
//如果返回为-1,表示未选择
function readSingle(formObj){
  return formObj.selectedIndex;
}

//返回多选列表中被选中数据项的个数
//如果返回为0,表示未选择
function readMultiple(formObj){
  var len=formObj.length;
  var count=0;
  for(i=0;i<len;i++){
    if(formObj.options[i].selected){
      count++;
    }
  }
  return count;
}

//检查字符串是否匹配规定的正则表达式
function check(str,regex){
  var splitted=str.match(regex);
  if(splitted==null)
    return false;
  else
    return true;
}

//检查Email地址格式是否正确
function checkEmail(email){
var splitted = email.match("^(.+)@(.+)$");
if(splitted == null) return false;
if(splitted[1] != null )
{
var regexp_user=/^\"?[\w-_\.]*\"?$/;
if(splitted[1].match(regexp_user) == null) return false;
}
if(splitted[2] != null)
{
var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
if(splitted[2].match(regexp_domain) == null)
{
   var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
   if(splitted[2].match(regexp_ip) == null) return false;
}// if
return true;
}
}

2.Re:【原创】一个使用相对简单的客户端表单完整和合法性校验的JS文件 [Re: jimshen] Copy to clipboard
Posted by: jimshen
Posted on: 2004-07-01 18:57

在网页中用下面的形式验证

<script language="JavaScript" src="validate.js"></script>
<script language="JavaScript">
<!--
function checkForm(){
  if(!validate(form1.username,"用户名",ALPHANUM,6,16))
    return false;
  if(!validate(form1.password,"密码",PASSWORD,6,16))
    return false;
  return true;
}
//-->
</script>

需要验证的表单

<form name="form1" method="post" action="<%=url%>" onSubmit="return checkForm();">
            用户名
            <input name="username" type="text" id="username" size="16" maxlength="16">
            密码
            <input name="password" type="password" id="password" size="16" maxlength="16">
            <input type="submit" name="Submit" value="快速登录">
          </form>


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923