还有另一个jQuery支持的表单验证器,用于使用自定义验证规则验证表单字段。
1.下载并加载Nice Validator插件。
<script src="/path/to/cdn/jquery.slim.min.js"></script> <script src="/path/to/dist/jquery.validator.min.js?local=en"></script>
2.使用验证表单字段数据-*属性:
<form class="form" data-validator-option="{timely:2, focusCleanup:true}">
<div class="form-item">
<label class="label">Username</label>
<input type="text" name="username"
data-rule="required;username;"
data-rule-username="[/^[\w\d]{3,12}$/, 'Please enter 3-12 digits, letters, underscores']"
data-tip="You can use letters, numbers and periods"
>
</div>
<div class="form-item">
<label class="label">Password</label>
<input type="password" name="pwd"
data-rule="Password: required; length(8~16)"
data-tip="Please fill in at least eight characters"
>
</div>
<div class="form-item">
<label class="label">Verify Password</label>
<input type="password" name="pwdAgain" data-rule="Verify Password: required; match(pwd)">
</div>
<div class="form-item">
<label class="label">Gender</label>
<select name="gender" data-rule="required">
<option value="">select ...</option>
<option value="1">Male</option>
<option value="2">Female</option>
<option value="3">Other</option>
</select>
</div>
<div class="form-item">
<label class="label">Email</label>
<input type="text" name="email" data-rule="required;email">
</div>
<div class="form-item">
<label class="label">Interest</label>
<label><input type="checkbox" name="interest" data-rule="checked">sports</label>
<label><input type="checkbox" name="interest">movie</label>
<label><input type="checkbox" name="interest">game</label>
</div>
<div class="form-item">
<label class="label">Note</label>
<textarea data-rule="required;"></textarea>
</div>
<div class="form-item">
<label><input type="checkbox" id="agree_arguments" data-rule="checked">I agree to the service agreement.</label>
</div>
<div class="form-item">
<button type="submit">Submit</button>
</div>
</form>
3.或者通过JavaScript。
$('#form').validator({
fields: {
'email': 'required;email',
'pwd': 'required;length(6~16)',
// ...
}
});
4.内置验证规则:
5.创建自定义规则:
// en.js
$.validator.config({
// Custom rules
rules: {
// ...
},
});
// or
$("#form").validator(
rules: {
// ...
}
);
// or via data attribute
<input name="demo" data-rule="required;xxx" data-rule-xxx="[/^\d{6}$/, '6 digits']">
// or via JS function
mobile: function(element, params) {
return /^1[3458]\d{9}$/.test(element.value) || 'Phone Number Validator';
};
// using test function
loginName: function(element) {
return /^[a-zA-Z]\w{3,}/.test(element.value) ||
this.test(element, "mobile")===true ||
this.test(element, "email")===true ||
'Input username, phone number, or email';
}
// custom ajax validation
myRemote: function(element){
return $.ajax({
url: 'check/username.php',
type: 'post',
data: element.name +'='+ element.value,
dataType: 'json'
});
}
6.可用的插件选项:
$("#form").validator(
// 1 = enable debug
// 2 = ignore validation result
debug: 0,
// 0: validate the form on submit
// 1: validate the field when lose focus
// 2: validate the field when the value has changed
// 3: 1+2
// 8: validate the field when the value has changed and show the result
// 9: 1+2 and show the result
timely: 1,
// theme name
theme: 'default',
// ignore form fields
ignore: '',
// ignore empty fields
ignoreBlank: false,
// move focus to the first invalid field
focusInvalid: true,
// clear error message when the field got focus
focusCleanup: false,
// stop the plugin when the first error is captured
stopOnError: false,
// default CSS classes
formClass: 'n-default',
validClass: 'n-valid',
invalidClass: 'n-invalid',
bindClassTo: null,
// show success messages
showOk: true,
// custom error messages
msgWrapper: 'span',
msgArrow: '',
msgIcon: '<span class="n-icon"></span>',
msgClass: 'n-right',
msgStyle: '',
messages: {
required: "Please fill in this field",
email: "Please enter a valid email address.",
// ...
},
msgMaker: function(opt) {
var html;
html = '<span role="alert" class="msg-wrap n-'+ opt.type + '">' + opt.arrow;
if (opt.result) {
$.each(opt.result, function(i, obj){
html += '<span class="n-'+ obj.type +'">' + opt.icon + '<span class="n-msg">' + obj.msg + '</span></span>';
});
} else {
html += opt.icon + '<span class="n-msg">' + opt.msg + '</span>';
}
html += '</span>';
return html;
},
// custom display
display: function(elem) {
// ...
},
// function(elem) | jqSelector
target: null,
// apply options & validators to fields
fileds: {
// ...
}
// translate ajax response to validation result
dataFilter: function (data) {
if ( isString(data) || ( isObject(data) && ('error' in data || 'ok' in data) ) ) {
return data;
}
},
// callbacks
beforeSubmit: function(form) {
// ...
},
valid: function(form) {
// ...
},
invalid: function(form, errors) {
// ...
},
validation: function(form) {
// ...
},
msgShow: function($msgbox, type) {
// ...
},
msgHide: function($msgbox, type) {
// ...
},
);
7.API方法:
// clear messages
$('#form').validator("cleanUp");
// destroy the plugin
$('#form').validator("destroy");
// check if is valid
$('#field').isValid(function(v){
if (v) {
// do something
}
});
// update options
$.validator.config({
// options here
});
// set theme
$.validator.setTheme("myTheme", {
// options here
});
// test validation rule
$('#form').test(elem, rule);
// set form field
$('#form').setField(key, field);
$('#form')..setField(obj);
// show/hide messages
$('#form').showMsg(elem, obj);
$('#form').hideMsg(elem);
// prevent duplicate submit
$('#form').holdSubmit(hold);
8.事件:
$('#form').on('validation', function(e, current){
// do something...
});
$('#form').on('valid.form', function(e, form){
// do something...
});
$('#form').on('invalid.form', function(e, form, errors){
// do something...
});
$('#username').on('valid.field', function(e, result){
// do something...
});
$('#username').on('invalid.field', function(e, result){
// do something...
});
$('#username').on('valid.rule', function(e, ruleName){
if (ruleName === 'remote') {
// do something...
}
});
$('#username').on('invalid.rule', function(e, ruleName){
if (ruleName === 'remote') {
// do something...
}
});