别让我再手写前端有效性验证


很早很早以前,还是做.NET的时候,总是自己写一些公共的js方法去验证输入有效性,然后通过在input上加onclick等事件来出发验证。后来接触很多前端框架,发现很多前端框架都是只加一个.class就搞定了验证,例如最常用的,在input上加一个class="requird"就搞定了非空验证,非常简洁和简单。所以看了看这些框架的js源码,发现,大多是用Jquery validate实现的,所以这篇文章主要是介绍它。而且,我在使用jquery validate的时候,借鉴了Maven的思想,即约定大于配置,这样,大部分验证,我们连class=“require”这些都不用写了。

废话不多说,先来一个实例,看看效果
(以下代码,忘记是哪位网友提供的了,当初我入门的时候,也是参考的这段代码)

前提:引入jquery.js和jquery.validate.js即可,只要不是太老的版本就行。

注意:jquery必须在jquery.validate.js 之前被引入,否则会报错

<script type="text/javascript" src="jquery.js"></script>       
<script type="text/javascript" src="jquery.validate.js"></script>


js
<script>
function checkidcard(num){
	var len = num.length, re;
	if (len == 15)
		re = new RegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/);
	else if (len == 18)
		re = new RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\d)$/);
	else{
		//alert("请输入15或18位身份证号,您输入的是 "+len+ "位"); 
		return false;
	}
	var a = num.match(re);
	if (a != null){
		if (len==15){
			var D = new Date("19"+a[3]+"/"+a[4]+"/"+a[5]);
			var B = D.getYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
		}else{
			var D = new Date(a[3]+"/"+a[4]+"/"+a[5]);
			var B = D.getFullYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
		}
		if (!B){
			//alert("输入的身份证号 "+ a[0] +" 里出生日期不对!"); 
			return false;
		}
	}

	return true;
} 
</script>

<script type="text/javascript">
	$.validator.setDefaults({
		submitHandler: function() { alert("submitted!"); }
	});
	
	// 添加验证方法 (身份证号码验证)
	jQuery.validator.addMethod("isIdCardNo", function(value, element) {   
		return this.optional(element) || checkidcard(value);   
	}, "请正确输入您的身份证号码"); 
	
	$().ready(function() {
		$("#firstform").validate();
		
		$("#secondform").validate({
			/*errorLabelContainer: "#messageBox",		//显示错误信息的容器ID
			wrapper: "li",								//包含每个错误信息的容器*/
			rules:{
				xm:{
					required: true,
					minlength: 2,
					maxlength: 5
				},
				pwd:{
					required: true,
					minlength: 6
				},
				confirm_pwd:{
					required: true,
					equalTo: "#pwd"
				},
				f2csrq:{
					required: true,
					date: true
				},
				f2xjzd: {
					required: true	
				},
				f2sfzh:{
					/*digits: true,
					rangelength: [18,20]*/
					required: true,
					isIdCardNo: true
				}
			},
			messages:{
				xm:{
					required: "请填写姓名",
					minlength: "字符长度不能小于2个字符",
					maxlength: "字符长度不能大于5个字符"
				},
				pwd:{
					required: "请填写密码",
					minlength: "字符长度不能小于6个字符"
				},
				confirm_pwd:{
					required: "请再次输入密码",
					equalTo: "密码不一致"
				},
				f2csrq:{
					required: "请输入出生日期",
					date: "日期格式不正确(例:2009/04/07)"
				},
				f2xjzd:{
					required: "请输入地址"	
				},
				f2sfzh:{
					/*digits: "身份证号码只能为数字",
					rangelength: "身份号码长度为18~20个字符"*/
					required: "请输入身份证号",
					isIdCardNo: "身份证号不正确"
				}
			}
		});
		
		/*// 输入框获得焦点时,样式设置   
		$('input').focus(function(){   
			if($(this).is(":text") || $(this).is(":password"))   
				$(this).addClass('focus');   
			if ($(this).hasClass('have_tooltip')) {   
				$(this).parent().parent().removeClass('field_normal').addClass('field_focus');   
			}   
		});   
		
		// 输入框失去焦点时,样式设置   
		$('input').blur(function() {   
			$(this).removeClass('focus');   
			if ($(this).hasClass('have_tooltip')) {   
				$(this).parent().parent().removeClass('field_focus').addClass('field_normal');   
			}   
		});*/
	});
</script>
html
<div id="header"></div>
<div id="main">

<form id="firstform" method="get" action="">
	<fieldset>
    	<legend>jQuery验证</legend>   
        <div id="xm" class="owinput">
			<div class="owlabel">
            	<label class="req" for="xm"> 姓  名 :</label>
            </div>
			<div class="owfield">
				<span class="inp"> <input name="xm" class="required" minlength="2"> </span>
			</div>
        </div>
        
        <div id="xb" class="owinput">
			<div class="owlabel">
            	<label class="req" for="f1pwd"> 密  码 :</label>
            </div>
			<div class="owfield">
				<span class="inp"> <input id="f1pwd" name="f1pwd" class="required" minlength="6"> </span>
			</div>
        </div>
        
        <div id="xb" class="owinput">
			<div class="owlabel">
            	<label class="req" for="f1pwd2"> 密码确认 :</label>
            </div>
            <div class="owfield">
				<span class="inp"> <input value="" name="f1pwd2" type="text" class="required" equalTo="#f1pwd"> </span>
			</div>
        </div>
        
        <div id="csrq" class="owinput">
			<div class="owlabel">
            	<label class="req" for="f1csrq"> 出生日期 :</label>
            </div>
			<div class="owfield">
				<span class="inp"> <input name="f1csrq" type="text" class="required date"> </span>
			</div>
        </div>
        
        <div id="xjzd" class="owinput">
			<div class="owlabel">
            	<label class="req" for="f1xjzd"> 现居住地 :</label>
            </div>
			<div class="owfield">
				<span class="inp"> <input  name="f1xjzd" type="text" class="required"> </span>
			</div>
        </div>
        
        <div id="sfzh" class="owinput">
			<div class="owlabel">
            	<label class="req" for="f1sfzh"> 身份证号 :</label>
            </div>
			<div class="owfield">
				<span class="inp"> <input name="f1sfzh" type="text" class="required isIdCardNo" minlength="18" maxlength="19"> </span>
			</div>
        </div>         
    </fieldset>
    
    <div id="regSubmit">
        <span id="btnCreate" class="regBtn" οnmοuseοver="btncreatehover(this);" οnmοuseοut="btncreateout(this);">
            <b class="tl"><b class="tr"></b></b><button id="send" type="submit">提  交</button><b class="bl"><b class="br"></b></b>
        </span>
        <span id="btnCancel" class="cancelBtn" οnmοuseοver="btncancelhover(this);" οnmοuseοut="btncancelout(this);">
            <b class="tl"><b class="tr"></b></b><button id="cancelBtn" type="button">取  消</button><b class="bl"><b class="br"></b></b>
        </span>
    </div>
</form>
    
<form id="secondform">    
    <fieldset>
    	<legend>自定义jQuery验证</legend>
        <div id="xm" class="owinput">
			<div class="owlabel">
            	<label class="req" for="xm"> 姓  名 :</label>
            </div>
			<div class="owfield">
				<span class="inp"> <input name="xm" type="text"> </span>
			</div>
        </div>
        
        <div id="xb" class="owinput">
			<div class="owlabel">
            	<label class="req" for="pwd"> 密  码 :</label>
            </div>
			<div class="owfield">
				<span class="inp"> <input id="pwd" name="pwd" type="text"> </span>
			</div>
        </div>
        
        <div id="xb" class="owinput">
			<div class="owlabel">
            	<label class="req" for="confirm_pwd"> 密码确认 :</label>
            </div>
            <div class="owfield">
				<span class="inp"> <input name="confirm_pwd" type="text"> </span>
			</div>
        </div>
        
        <div id="csrq" class="owinput">
			<div class="owlabel">
            	<label class="req" for="f2csrq"> 出生日期 :</label>
            </div>
			<div class="owfield">
				<span class="inp"> <input name="f2csrq" type="text"> </span>
			</div>
        </div>
        
        <div id="xjzd" class="owinput">
			<div class="owlabel">
            	<label class="req" for="f2xjzd"> 现居住地 :</label>
            </div>
			<div class="owfield">
				<span class="inp"> <input value="" name="f2xjzd" type="text"> </span>
			</div>
        </div>
        
        <div id="sfzh" class="owinput">
			<div class="owlabel">
            	<label class="req" for="f2sfzh"> 身份证号 :</label>
            </div>
			<div class="owfield">
				<span class="inp"> <input name="f2sfzh" type="text"> </span>
			</div>
        </div>   
    </fieldset>
    <div id="messageBox"></div>	<!-- 此容器用于汇总显示错误信息 -->
    <div id="regSubmit">
        <span id="btnCreate" class="regBtn" οnmοuseοver="btncreatehover(this);" οnmοuseοut="btncreateout(this);">
            <b class="tl"><b class="tr"></b></b><button id="send" type="submit">提  交</button><b class="bl"><b class="br"></b></b>
        </span>
        <span id="btnCancel" class="cancelBtn" οnmοuseοver="btncancelhover(this);" οnmοuseοut="btncancelout(this);">
            <b class="tl"><b class="tr"></b></b><button id="cancelBtn" type="button">取  消</button><b class="bl"><b class="br"></b></b>
        </span>
    </div>
</form>
</div>
<div id="footer"></div>

先贴到容器里看看效果吧。


详解:

官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation

jQuery验证控件jquery.validate.js使用说明+中文API

jQuery plugin: Validation 使用说明  

参考:3WSchool

一导入js库
<script src="../js/jquery.js" type="text/javascript"></script>
<script src="../js/jquery.validate.js" type="text/javascript"></script>

 

二、默认校验规则
(1)required:true                必输字段
(2)remote:"check.php"      使用ajax方法调用check.php验证输入值
(3)email:true                    必须输入正确格式的电子邮件
(4)url:true                        必须输入正确格式的网址
(5)date:true                      必须输入正确格式的日期 日期校验ie6出错,慎用
(6)dateISO:true                必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22 只验证格式,不验证有效性
(7)number:true                 必须输入合法的数字(负数,小数)
(8)digits:true                    必须输入整数
(9)creditcard:                   必须输入合法的信用卡号
(10)equalTo:"#field"          输入值必须和#field相同
(11)accept:                       输入拥有合法后缀名的字符串(上传文件的后缀)
(12)maxlength:5               输入长度最多是5的字符串(汉字算一个字符)
(13)minlength:10              输入长度最小是10的字符串(汉字算一个字符)
(14)rangelength:[5,10]      输入长度必须介于 5 和 10 之间的字符串")(汉字算一个字符)
(15)range:[5,10]               输入值必须介于 5 和 10 之间
(16)max:5                        输入值不能大于5
(17)min:10                       输入值不能小于10

 

三、默认的提示
messages: {
    required: "This field is required.",
    remote: "Please fix this field.",
    email: "Please enter a valid email address.",
    url: "Please enter a valid URL.",
    date: "Please enter a valid date.",
    dateISO: "Please enter a valid date (ISO).",
    dateDE: "Bitte geben Sie ein g眉ltiges Datum ein.",
    number: "Please enter a valid number.",
    numberDE: "Bitte geben Sie eine Nummer ein.",
    digits: "Please enter only digits",
    creditcard: "Please enter a valid credit card number.",
    equalTo: "Please enter the same value again.",
    accept: "Please enter a value with a valid extension.",
    maxlength: $.validator.format("Please enter no more than {0} characters."),
    minlength: $.validator.format("Please enter at least {0} characters."),
    rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
    range: $.validator.format("Please enter a value between {0} and {1}."),
    max: $.validator.format("Please enter a value less than or equal to {0}."),
    min: $.validator.format("Please enter a value greater than or equal to {0}.")
},

如需要修改,可在js代码中加入:

jQuery.extend(jQuery.validator.messages, {
  required: "必选字段",
  remote: "请修正该字段",
  email: "请输入正确格式的电子邮件",
  url: "请输入合法的网址",
  date: "请输入合法的日期",
  dateISO: "请输入合法的日期 (ISO).",
  number: "请输入合法的数字",
  digits: "只能输入整数",
  creditcard: "请输入合法的信用卡号",
  equalTo: "请再次输入相同的值",
  accept: "请输入拥有合法后缀名的字符串",
  maxlength: jQuery.validator.format("请输入一个 长度最多是 {0} 的字符串"),
  minlength: jQuery.validator.format("请输入一个 长度最少是 {0} 的字符串"),
  rangelength: jQuery.validator.format("请输入 一个长度介于 {0} 和 {1} 之间的字符串"),
  range: jQuery.validator.format("请输入一个介于 {0} 和 {1} 之间的值"),
  max: jQuery.validator.format("请输入一个最大为{0} 的值"),
  min: jQuery.validator.format("请输入一个最小为{0} 的值")
});

推荐做法,将此文件放入messages_cn.js中,在页面中引入
<script src="../js/messages_cn.js" type="text/javascript"></script>

 

四、使用方式
1.将校验规则写到控件中

复制代码
< script  src ="../js/jquery.js"  type ="text/javascript" ></ script >
< script  src ="../js/jquery.validate.js"  type ="text/javascript" ></ script >
< script  src ="./js/jquery.metadata.js"  type ="text/javascript" ></ script >

$().ready(function() {
 $("#signupForm").validate();
});


< form  id ="signupForm"  method ="get"  action ="" >
     < p >
         < label  for ="firstname" >Firstname </ label >
         < input  id ="firstname"  name ="firstname"  class ="required"   />
     </ p >
  < p >
   < label  for ="email" >E-Mail </ label >
   < input  id ="email"  name ="email"  class ="required email"   />
  </ p >
  < p >
   < label  for ="password" >Password </ label >
   < input  id ="password"  name ="password"  type ="password"  class ="{required:true,minlength:5}"   />
  </ p >
  < p >
   < label  for ="confirm_password" >确认密码 </ label >
   < input  id ="confirm_password"  name ="confirm_password"  type ="password"  class ="{required:true,minlength:5,equalTo:'#password'}"   />
  </ p >
     < p >
         < input  class ="submit"  type ="submit"  value ="Submit" />
     </ p >
</ form >
复制代码

使用class="{}"的方式,必须引入包:jquery.metadata.js

可以使用如下的方法,修改提示内容:
class="{required:true,minlength:5,messages:{required:'请输入内容'}}"

在使用equalTo关键字时,后面的内容必须加上引号,如下代码:
class="{required:true,minlength:5,equalTo:'#password'}"

 

2.将校验规则写到js代码中

复制代码
$().ready( function() {
 $("#signupForm").validate({
        rules: {
   firstname: "required",
   email: {
    required:  true,
    email:  true
   },
   password: {
    required:  true,
    minlength: 5
   },
   confirm_password: {
    required:  true,
    minlength: 5,
    equalTo: "#password"
   }
  },
        messages: {
   firstname: "请输入姓名",
   email: {
    required: "请输入Email地址",
    email: "请输入正确的email地址"
   },
   password: {
    required: "请输入密码",
    minlength: jQuery.format("密码不能小于{0}个字 符")
   },
   confirm_password: {
    required: "请输入确认密码",
    minlength: "确认密码不能小于5个字符",
    equalTo: "两次输入密码不一致不一致"
   }
  }
    });
});
复制代码

//messages处,如果某个控件没有message,将调用默认的信息

复制代码
< form  id ="signupForm"  method ="get"  action ="" >
     < p >
         < label  for ="firstname" >Firstname </ label >
         < input  id ="firstname"  name ="firstname"   />
     </ p >
  < p >
   < label  for ="email" >E-Mail </ label >
   < input  id ="email"  name ="email"   />
  </ p >
  < p >
   < label  for ="password" >Password </ label >
   < input  id ="password"  name ="password"  type ="password"   />
  </ p >
  < p >
   < label  for ="confirm_password" >确认密码 </ label
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值