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"/>