Validate组件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求。该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证,同时提供了一个用来编写用户自定义方法的 API。
PS: input type=[checkbox,radio]时同组别内name必须相同,其他情况或元素下所有name必唯一。
不验证的元素包括:hidden, :submit, :reset, :image, :disabled;
如果需要验证有可能被用户操作隐藏的元素,需初始化时修改配置ignore,默认值:':hidden',或者阻止用户隐藏,或触发隐藏操作时,校验将要隐藏的元素是否验证通过;从行为上控制;
官网地址:https://jqueryvalidation.org
中文教程:http://www.runoob.com/jquery/jquery-plugin-validate.html
github:https://github.com/jquery-validation/jquery-validation/tree/master
基础包(必须)
jquery.js
bootstrap.min.js
组件包
jquery.validate.min.js
(废弃)jquery-validate.bootstrap-tooltip.min.js
序号 | 规则 | 描述 |
---|---|---|
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。 |
$(".selector").validate({ submitHandler:function(form) { //ajax提交表单或 form.submit(); //$(form).ajaxSubmit(); 需加载jquery-form.js var ajaxData = COM_TOOLS.serializeObject(form); //修改提交到服务器的数据 // ajaxData.param1 = 'value'; // ajaxData.param2 = ajaxData.param1+1; //例1 COM_TOOLS.ajaxFn({ type : "post", url : "/yourUrl", data : ajaxData, success : function(data,status){ parent.COM_TOOLS.alert("操作成功"); }, error : function(){ COM_TOOLS.alert("系统异常"); } }, 1); // 1:全屏loading遮罩;2:button loading遮罩; //等同于 例2 COM_TOOLS.loadingShade.open(); //防重复提交锁-打开 $.ajax({ type : "post", url : "/yourUrl", data : ajaxData, success : function(data,status){ parent.COM_TOOLS.alert("操作成功"); }, error : function(){ COM_TOOLS.alert("系统异常"); }, complete: function(XHR, textStatus) { COM_TOOLS.loadingShade.close(); //防重复提交锁-关闭 } }); } });
$( "#myinput" ).rules( "add", { required: true, minlength: 2, messages: { //可选 required: "Required input", minlength: jQuery.validator.format("Please, at least {0} characters are necessary") } }); // 或者 $('.selector').each(function(){ $(this).rules( "add", {required: true}); });
// 下方示例中的ck-number-len 是 ck-cus-* 系列中的特殊处理; <input class="form-control input-sm" name="name" value="" ck-number-len="[2,12]" type="text"> // 输出:数字格式错误(最多只能输入12位整数及最多2位小数 // 规则源码: $.validator.addMethod("ck-number-len", function(value, element, params) { return this.optional(element) || !check_input_num2(value, params); },'数字格式错误(最多只能输入{1}位整数及最多{0}位小数');
<form class="form-horizontal form-label-sm" id="upForm5" autocomplete="off"> <div class="form-group"> <label class="col-sm-3 control-label">只输入整数:</label> <div class="col-sm-3"> <input type="text" class="form-control input-sm" name="zhengshu" required digits="true"/> </div> <label class="col-sm-3 control-label">整数范围[5-10]:</label> <div class="col-sm-3"> <input type="text" class="form-control input-sm" name="zsfanwei" required range="[5,10]"/> </div> </div> <div class="form-group"> <label class="col-sm-3 control-label">只输入数字(含小数,支持千分位):</label> <div class="col-sm-3"> <input type="text" class="form-control input-sm" name="hxiaoshu" required number="true"/> </div> <label class="col-sm-3 control-label">只输入字母:</label> <div class="col-sm-3"> <input type="text" class="form-control input-sm" name="zimu" required ck-letter="true"/> </div> </div> <div class="form-group"> <label class="col-sm-3 control-label">只输入汉字:</label> <div class="col-sm-3"> <input type="text" class="form-control input-sm" name="hanzi" required ck-chinese="true"/> </div> <label class="col-sm-3 control-label">必须同时包含数字和字母:</label> <div class="col-sm-3"> <input type="text" class="form-control input-sm" name="shuzhizm" required ck-numandletter="true"/> </div> </div> <div class="form-group"> <label class="col-sm-3 control-label">邮箱验证:</label> <div class="col-sm-3"> <input type="text" class="form-control input-sm" name="youxiang" required ck-email="true"/> </div> <label class="col-sm-3 control-label">手机验证(1开头的11位数字|09开头的10位数字):</label> <div class="col-sm-3"> <input type="text" class="form-control input-sm" name="shouji" required ck-phone="true"/> </div> </div> <div class="form-group"> <label class="col-sm-3 control-label">身份验证(中国大陆):</label> <div class="col-sm-3"> <input type="text" class="form-control input-sm" name="shenfen" required ck-idcard="true"/> </div> <label class="col-sm-3 control-label">邮编验证(6位非全0整数):</label> <div class="col-sm-3"> <input type="text" class="form-control input-sm" name="youbian" required ck-zipcode="true"/> </div> </div> <div class="form-group"> <label class="col-sm-3 control-label">数字(0-9)或字母:</label> <div class="col-sm-3"> <input type="text" class="form-control input-sm" name="numorletter" required ck-numorletter="true"/> </div> <label class="col-sm-3 control-label">数字(0-9)、下划线或字母:</label> <div class="col-sm-3"> <input type="text" class="form-control input-sm" name="numorletteroruline" required ck-numorletteroruline="true"/> </div> </div> <div class="form-group"> <label class="col-sm-3 control-label">正数+0:</label> <div class="col-sm-3"> <input type="text" class="form-control input-sm" name="non-negative" required ck-non-negative="true"/> </div> <label class="col-sm-3 control-label">[A-Za-z0-9\-_]:</label> <div class="col-sm-3"> <input type="text" class="form-control input-sm" name="ck-i18n-key" required ck-i18n-key="true"/> </div> </div> <div class="form-group"> <label class="col-sm-3 control-label">特殊字符:</label> <div class="col-sm-3"> <input type="text" class="form-control input-sm" name="specialchars" required cus-specialchars="true"/> </div> <label class="col-sm-3 control-label">手机及电话号验证,支持台湾号码</label> <div class="col-sm-3"> <input type="text" class="form-control input-sm" name="phone-tel" required ck-phone-tel="true"/> </div> </div> <div class="form-group"> <div class="col-sm-offset-3 col-sm-4"> <button type="button" class="btn btn-success btn-sm" id="butSub5">提交</button> </div> </div> <div class="form-group"> <label class="col-sm-9 control-label"> <span class="text-danger">工具:</span> <span class="text-warning">输入17位数字生成最后一位;注意:必须遵循如下格式(年月日必须是合法格式),前6位(省市县区号)+年(4位)月(2位)日(2位)+2位数字+1位数字(男单数,女双数)+数字验证位(自动生成)【可根据身份证号码提取日期及性别的操作】</span> </label> <div class="col-sm-3"> <input type="text" class="form-control input-sm" name="aaa" id="demo1-input5_1" maxlength="17"/> <button type="button" class="btn btn-success btn-sm" id="butSub5_1">提交</button> <span>输出:</span> <input type="text" class="form-control input-sm" name="ddd" id="demo1-input5_2"/> </div> </div> </form>
//组件包引用规则 同上 //DEMO5 $('#upForm5').validate(); $('#butSub5').click(function(){ if(!$('#upForm5').validate().form()){ return false; } });
基础: <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"/> datetimepiker样式: <link rel="stylesheet" type="text/css" href="../css/plugins/datetimepicker/bootstrap-datetimepicker.min.css"/>
<form class="form-horizontal" id="upForm2"> <div class="form-group"> <label class="col-sm-2 control-label">用户名:</label> <div class="col-sm-4"><input class="form-control input-sm" name="uname" type="text"/></div> </div> <div class="form-group"> <label class="col-sm-2 control-label">密码:</label> <div class="col-sm-4"><input class="form-control input-sm" id="upwd" name="upwd" type="text"/></div> </div> <div class="form-group"> <label class="col-sm-2 control-label">确认密码:</label> <div class="col-sm-4"><input class="form-control input-sm" name="upwd2" type="text"/></div> </div> <div class="form-group"> <label class="col-sm-2 control-label">性别:</label> <div class="col-sm-4"> <label class="checkbox-inline i-checks"> <input type="radio" name="sex" value="option1" checked required> 男 </label> <label class="checkbox-inline i-checks"> <input type="radio" name="sex" value="option2" required> 女 </label> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">爱好(多选):</label> <div class="col-sm-4"> <label class="radio-inline i-checks"> <input type="checkbox" name="favor[]" value="option1"> 运动 </label> <label class="radio-inline i-checks"> <input type="checkbox" name="favor[]" value="option2"> 音乐 </label> <label class="radio-inline i-checks"> <input type="checkbox" name="favor[]" value="option2"> 电影 </label> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-4"> <button type="button" class="btn btn-success btn-sm" id="butSub2">提交</button> </div> </div> </form>
//iCheck组件 <script src="../js/plugins/iCheck/icheck.min.js" type="text/javascript"></script> //组件包引用规则 同上 //DEMO2 $('.i-checks').iCheck({ //如果使用了iCheck需要这段JS checkboxClass: 'icheckbox_square-green', radioClass: 'iradio_square-green', }).on('ifChanged', function(){ //如果使用了validate验证需要用一下代码 $(this).closest('form').validate().element(this); }); $('#upForm2').validate({ rules:{ uname:{ required:true, //使用组合的方式进行多项验证 minlength:6 }, upwd:{ required:true, rangelength:[6,12] }, upwd2:{ required:true, rangelength:[6,12], equalTo: "#upwd" }, "favor[]":{ //多选checkbox使用数组的形式 required:true, minlength:2 } }, messages:{ uname:{ required:"请输入您的用户名", minlength:"不能少于6位" }, upwd:{ required:"请输入密码", rangelength:"密码长度为6~12位" }, upwd2:{ required:"请再次输入密码", rangelength:"密码长度为6~12位", equalTo: "两次密码输入不一致" }, "favor[]":{ required:"请选择您的爱好", minlength:"至少选着两个爱好" } } }); $('#butSub2').click(function(){ if(!$('#upForm2').validate().form()){ return false; } });
基础: <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"/> iCheck-css <link href="../css/plugins/iCheck/custom.css" rel="stylesheet">
<form class="form-horizontal" id="upForm3"> <div class="form-group"> <label class="col-sm-2 control-label">电话:</label> <div class="col-sm-4"> <input class="form-control input-sm" type="text" name="uphone"/> </div> </div> <div class="form-group form-inline"> <label class="col-sm-2 control-label">日期比较:</label> <div class="input-group input-group-sm date" id="startime_div"> <input type="text" name="startime" id="startime" class="form-control input-sm" readonly> <span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span> </div> <div class="input-group input-group-sm date" id="endtime_div"> <input class="form-control input-sm" type="text" id="endtime" name="endtime" readonly/> <span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-4"> <button type="button" class="btn btn-success btn-sm" id="butSub3">提交</button> </div> </div> </form>
//组件包引用规则 同上 datetimepiker: <script src="../js/plugins/datetimepicker/bootstrap-datetimepicker.min.js" type="text/javascript" charset="utf-8"></script> //DEMO3 $('#upForm3').validate({ rules:{ uphone:{ "ck-phone":true, //boolean false不校验 }, startime:{ required:true, date:true }, endtime:{ required:true, date:true, } }, messages:{ uphone:{ //可以覆盖添加的默认错误信息 "ck-phone":"手机号格式错误" }, } }); //这个id为input外层的div的id $('#startime_div').datetimepicker().on('changeDate', function(){ var t_ = $(this).is('input') ? $(this) : $(this).children('input'); $('#endtime_div').datetimepicker('setStartDate', t_.val()); }); $('#endtime_div').datetimepicker().on('changeDate', function(){ var t_ = $(this).is('input') ? $(this) : $(this).children('input'); $('#startime_div').datetimepicker('setEndDate', t_.val()); }); $('#butSub3').click(function(){ if(!$('#upForm3').validate().form()){ return false; } });
基础: <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"/> datetimepiker样式: <link rel="stylesheet" type="text/css" href="../css/plugins/datetimepicker/bootstrap-datetimepicker.min.css"/>
<form class="form-horizontal" id="upForm4"> <div class="form-group"> <label class="col-sm-2 control-label">旧密码验证:</label> <div class="col-sm-4"> <input type="text" class="form-control input-sm" id="pwd" name="pwd"/> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-4"> <button type="button" class="btn btn-success btn-sm" id="butSub4">提交</button> </div> </div> </form>
//组件包引用规则 同上 //DEMO4 $('#upForm4').validate({ rules: { pwd: { required: true, remote: { //param: { url: "/api", //后台处理程序 type: "get", //数据发送方式 //dataType: "json", //接受数据格式 //async : false, //同步请求,默认true(建议使用 true,并结合使用submitHandler回调方法提交表单) /* PS:如使用validator.form() && form.submit()方式验证提交表单,请改成同步 */ data: { //要传递的数据 pwd: function() { return $("#pwd").val(); } }, dataFilter: function(d) { //判断控制器返回的内容 if(d == "true") { return true; } else { return false; } } //}, //depends:function(){return true;} //结合param 使用,返回 true 则不发送ajax 请求 } } }, messages: { pwd: { required: "请输入您的旧密码", remote: "原始密码不正确,请重新填写!" } }, submitHandler: function(form) { //AJAX /*$.ajax({ url:"_URL_", type:"get", data:$(form).serialize(), success:function(d){ //TODO } })*/ } }); $('#butSub4').click(function(){ $('#upForm4').submit(); });
基础: <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"/>
//注:此处表单元素添加.js-require类是为了校验时所用; //.js-require类的名称可自行定义; <form class="form-horizontal" id="upForm6"> <div class="form-group"> <label class="col-sm-2 control-label">字段1:</label> <div class="col-sm-4"> <input type="text" class="form-control input-sm js-require" name="name1"/> </div> <label class="col-sm-2 control-label">字段2:</label> <div class="col-sm-4"> <input type="text" class="form-control input-sm js-require" name="name2"/> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">字段3:</label> <div class="col-sm-4"> <input type="text" class="form-control input-sm js-require" name="name3"/> </div> <label class="col-sm-2 control-label">字段4:</label> <div class="col-sm-4"> <input type="text" class="form-control input-sm js-require" name="name4"/> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-4"> <button type="button" class="btn btn-success btn-sm" id="butSub6">提交</button> </div> </div> </form>
//组件包引用规则 同上 //DEMO6 /* 注:[2,".js-require"] * options[0]: 组中至少填写的字段数 * options[1]: 与自定义名称相对应的CSS选择器,用于定义有条件的字段组 * * 此次添加的自定义校验 不支持 在DOM元素内直接填写,如:required="true"* */ $('#upForm6').validate({ rules:{ name1:{require_from_group: [2,".js-require"]}, name2:{require_from_group: [2,".js-require"]}, name3:{require_from_group: [2,".js-require"]}, name4:{require_from_group: [2,".js-require"]} }/*, messages:{ //可选 name1:{require_from_group:"请至少填写{0}项"}, name2:{require_from_group:"请至少填写{0}项"}, name3:{require_from_group:"请至少填写{0}项"}, name4:{require_from_group:"请至少填写{0}项"} }*/ }); $('#butSub6').click(function(){ if(!$('#upForm6').validate().form()){ return false; } });
基础: <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"/>
//注:此处表单元素添加.js-require类是为了校验时所用; //.js-require类的名称可自行定义; <form class="form-horizontal" id="upForm7"> <div class="form-group"> <label class="col-sm-2 control-label">字段1:</label> <div class="col-sm-4"> <input type="text" class="form-control input-sm js-require" name="name1"/> </div> <label class="col-sm-2 control-label">字段2:</label> <div class="col-sm-4"> <input type="text" class="form-control input-sm js-require" name="name2"/> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">字段3:</label> <div class="col-sm-4"> <input type="text" class="form-control input-sm js-require" name="name3"/> </div> <label class="col-sm-2 control-label">字段4:</label> <div class="col-sm-4"> <input type="text" class="form-control input-sm js-require" name="name4"/> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-4"> <button type="button" class="btn btn-success btn-sm" id="butSub7">提交</button> </div> </div> </form>
//组件包引用规则 同上 //DEMO7 /* 注:[2,".js-require"] * options[0]: 组中至少填写的字段数 * options[1]: 与自定义名称相对应的CSS选择器,用于定义有条件的字段组 * * 此次添加的自定义校验 不支持 在DOM元素内直接填写,如:required="true"* */ $('#upForm7').validate({ rules:{ name1:{skip_or_fill_minimum: [3,".js-require"]}, name2:{skip_or_fill_minimum: [3,".js-require"]}, name3:{skip_or_fill_minimum: [3,".js-require"]}, name4:{skip_or_fill_minimum: [3,".js-require"]} }/*, messages:{ //可选 name1:{skip_or_fill_minimum:"请至少填写{0}项或不填写"}, name2:{skip_or_fill_minimum:"请至少填写{0}项或不填写"}, name3:{skip_or_fill_minimum:"请至少填写{0}项或不填写"}, name4:{skip_or_fill_minimum:"请至少填写{0}项或不填写"} } */ }); $('#butSub7').click(function(){ console.log(1); if(!$('#upForm7').validate().form()){ return false; } });
基础: <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"/>