//ajax 输入验证

var msgObj;

function   ajaxInputCheck(msgObj1,url)   {

msgObj=msgObj1;

//url="5_checkInput.php?value="+inputObj.value+"&msgObj="+msgObj+"&ifNull=0";

if   (window.XMLHttpRequest)  
	{   req   =   new   XMLHttpRequest();   }   
else if   (window.ActiveXObject) 
	{	req   =   new   ActiveXObject("Msxml2.XMLHTTP");   }   

if   (req)   {  
      req.onreadystatechange   =   processReqChange;   
    
      req.open("GET", url, true);   
      req.send(null);   
      }   
}   
    
function   processReqChange(){
 if   (req.readyState   ==   4){   
        document.getElementById("check_"+msgObj).innerHTML=req.responseText;   
	  }       
} 



// b-18 showMsg(String, Object)
function showMsg(Msg, Obj){
 alert(Msg);
 Obj.focus();
 return false;
}


/*检验是否为数字*/
function isDigit(obj,msg){
 obj.value=obj.value;
 slen=obj.value.length;

 if(slen<1){
  return showMsg(msg,obj);
 }

 for (i=0; i<slen; i++){
	
  cc = obj.value.charAt(i);
  if (cc <"0" || cc >"9") 
	 {
	  if(cc!=".")
		 return showMsg(msg,obj);
	 }
 }
 return true;
}

/*检验是否为空*/
function isEmpty(obj,msg){

 obj.value=obj.value;
 slen=obj.value.length;

 if(slen==0){
  alert(msg);obj.focus();return false;
 }
return true;
}

//建立者:jiarry@hotmail.com
//判断字符串是否为合法邮件地址
// a-9 ifEmail(str,allowNull)
function ifEmail(obj,allowNull,msg){

str=obj.value;

 if(str.length<3) {
	  showMsg(msg);
	  return allowNull;
	}

var re=/^[\w.-]+@([0-9a-z][\w-]+\.)+[a-z]{2,3}$/;    //去掉相应一个\，错误转义了
 
 if(re.test(str))
  {
  return true;
   }
 else
 {
 showMsg(msg);
 return false;
 }
}


function checkchar(obj)
{
 var re=/^[\w.-]+@([0-9a-z][\w-]+\.)+[a-z]{2,3}$/;    //去掉相应一个\，错误转义了
 
 if(re.test(obj.value))
  {
  return true;
   }
 else
 {
 alert("请输入正确的EMAIL地址！");
 obj.focus();
 return false;
 }
}

function check(form1)
{
//通用化表单校验函数!
var re=new Array();
re[1] = /^\w{3,20}$/;                                           //ID,不允许中文
re[2] = /^\d+$/ ;                                              //数值

re[3] = /^\w+([-+.]\w+)*@\w+([-.]\\w+)*\.\w+([-.]\w+)*$/;
	
// /^([a-zA-Z0-9]+[_|\-|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\-|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/gi;

//re[3] = /^([a-zA-Z0-9]+[_|\-|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\-|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/gi                                     //Email
re[4] = /^.{2,30}$/                                           //普通,允许中文
re[5] = /^\d{6}$/                                              //邮政编码
re[6] = /^(00\d{1,3}-){0,1}0\d{3}-\d{7,8}$/                   //电话号码
re[7] = /^\d{4}$/                                        //4位验证码
re[8] = /(^\d{15}$)|(^\d{18}$)|(^\d{17}[Xx]$)/          //身份证
re[9] = /^(.|\n){1,}$/                                     //普通无最大限制,允许中文
re[10]= /^((\(\d{3}\))|(\d{3}\-))?13\d{9}|15\d{9}$/;//手机号码
//email地址
re[11]= /^([a-zA-Z0-9]+[_|\-|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\-|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/gi;

var tem=0,i,j,x,y;    
for(i=0;i<form1.length;i++)
{
      var x = form1[i].getAttribute("DType");
      if (x != null){
            x = form1[i].getAttribute("DType").toUpperCase();
            y = parseInt(form1[i].getAttribute("DType").substr(1));
            switch(form1[i].type){
            case "text":
            case "textarea":
            case "password":
                  if(x.charAt(0)!='N'||form1[i].value.length>0){                      
                        if(y!=0){
                              if(form1[i].value.search(re[y])==-1){
                                    alert('错误提示\n\n【'+form1[i].title+"】");
                                    form1[i].focus();
                                    return false;
                                    }
                              if(form1[i].type=="password"&&form1[i+1].type=="password"&&form1[i].value!=form1[i+1].value){
                                    alert('两次输入的密码不一致,请重新输入');
                                    form1[i].focus();
                                    return false;
                                    }
                              }
                        }
                        break;
            case "select-one":if(y>1)y=1;
            case "select-multiple":
                  if(x.charAt(0)!='N'){
                        if(y!=0){tem=0;
                              for(j=0;j<form1[i].length;j++)
                                    {
                                    if(form1[i].options[j].selected)tem++;
                                    }
                              if(tem<y){
                                    alert(form1[i].title+'错误提示\n\n【你应该至少选择'+y+'项.】');
                                                form1[i].focus();
                                                return false;
                                    }
                        }
                  }
                  break;
            case "radio":if(y>1)y=1;
            case "checkbox":
                  if(x.charAt(0)!='N'){
                        if(y!=0){tem=0;
                              var radiotem=eval("form1."+form1[i].name);
                              for(j=0;j<radiotem.length;j++)
                                    if(radiotem[j].checked)tem++;
                                    }
                              if(tem<y){
                                    alert(form1[i].title+'错误提示\n你应该至少选择'+y+'项.');
                                                form1[i].focus();
                                                return false;
                                    }
                        }
                  break;
            }
      }
}
return true;
}

/*

使用说明

使用说明

为每个需要验证的表单项新加一个一个属性 DType
DType属性的赋值为
一个字母+一个数字组成
字母的取值只有y 和 n

y表示该项不允许为空
n表示该项允许为空但要做值合法性检测

数字的取值与表单域的type有关

对于
"text":"textarea":"password":
      该数值为校验的模式,比如Email校验,此处就为3 
      函数内置了几种校验模式,当然懂正则的可以自行扩展,随意发挥
对于
select 和 radio
   此处为一大于0的数值即可

对于
checkbox和select-multiple
   此处为必须选择的最小项数

还利用表单域的另一属性title
title的内容为该域的取值说明.title可以不填.......

好了,各元素都设置好了之后

在表单的 onsubmit事件中加上 return check(表单名)即可....
 




对密码域的特别说明

对密码域的特别说明

本函数可对相邻的两个密码域自动做相等比较

所以对于重复输入密码的应用
您只需让两个密码域相邻(即中间再没有别的表单控件),并设置第一个的DType属性即可

但是对于修改密码的应用,可能出现三个密码域相邻的情况,即第一个为输入旧密码,第二个和第三个为密码与重复密码

该函数会将第一个与第二个自动进行相等匹配...这不是我们希望的

解决办法就是在第一个后插入一个隐藏域()使第一个与第二个密码域不相邻即可..

对checkbox与radio的说明

对checkbox和radio的要求是必须成组(name相同),最少选择个数是指该组中的选择个数
一组checkbox与radio控件中,只需设置其中的一个控件DType属性即可 


简单示例.

简单示例.


<FORM METHOD=POST ACTION="" name=form1 onsubmit="return check(form1)"><BR>
文本型举例<BR>
<INPUT TYPE="text" NAME="Email" DType="y3" title="Email格式" value="y0h@163.com">          E-mail检测
<BR><INPUT TYPE="text" NAME="Email" DType="n6" title="电话号码">          电话号码,可以为空<BR>
密码校验<BR>
<INPUT TYPE="password" DType="y01" title="不为空大于3位"><INPUT TYPE="password" >
<BR>
文本区域<BR>
<textarea name="textarea" DType="y9" Title="文本区域"></textarea>
<BR>checkbox举例<BR>
<INPUT TYPE="checkbox" name="a" title="aaa"><INPUT TYPE="checkbox" name="a" title="y01"><INPUT TYPE="checkbox" name="a" title="y1"><INPUT TYPE="checkbox" DType="y2" name="a" title="checkbox">最少选择两项<BR>radio举例<BR>
<INPUT TYPE="radio" name="b" title="aaa"><INPUT TYPE="radio" name="b" title="y01"><INPUT TYPE="radio" name="b" title="y1"><INPUT TYPE="radio" DType="y2" name="b" title="radio"><BR>
多选列表<BR><select name="select" size="4" DType="y2" multiple title="多选列表">
<option value="111">111</option>
<option value="222">222</option>
<option value="333">333</option>
<option value="444">444</option>
</select>最少选择两项<BR>
<INPUT TYPE="submit" value="检测"></FORM>
 


*/


/*---------------------------------
*
*    JS : 获得 url的变量 
*
*----------------------------------*/
function   request2(panStr)     
  {     
  var   vStr="";
  var	sorStr=location.search;
  if   (sorStr==null   ||   sorStr==""   ||   panStr==null   ||   panStr=="")   return   vStr;     
  sorStr   =   sorStr.toLowerCase();   
  panStr   +=   "=";     
  var   itmp=sorStr.indexOf(panStr);     
  if   (itmp<0){return   vStr;}     
  sorStr   =   sorStr.substr(itmp   +   panStr.length);     
  itmp=sorStr.indexOf("&");     
  if   (itmp<0)   
  {   
  return   sorStr;     
  }else{   
  sorStr=sorStr.substr(0,itmp);     
  return   sorStr;   
  }     
}

function request(name) 
{ 
var result=null;
var reg = new RegExp("(^|&)"+ name +"=([^&]*)([&]|$)"); 
var r = window.location.search.substr(1).match(reg); 
if (r!=null) 				result=unescape(r[2]);
//if(result.indexOf("?")>0)	result=result.substr(0,result.indexOf("?"));
return result; 
}  


