This time I will bring you a detailed explanation of the use of bootstrap-validator and what are the precautions for using bootstrap-validator. The following is a practical case, let's take a look.
【Related video recommendation: Bootstrap tutorial】
The required js, css and img are explained below, please read patiently!
Required js files: jquery.min.js, bootstrapValidator.min.js, bootstrap-validator-default.js (a customized default configuration file , written by an individual, unofficial file )
The first two files are available on the cdn. The content of bootstrap-validator-default.js is as follows:
/*默认规则 start*///ip格式$.fn.bootstrapValidator.validators.ip = { //message: "ip格式不正确" validate: function(validator, $field, options) { var value = $field.val(), ipReg = /^(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$/; if (value === '') { return true; } return ipReg.test(value); } };//password格式$.fn.bootstrapValidator.validators.pw = { //message: "必须包含数字、英文字母、特殊字符" validate: function(validator, $field, options) { var value = $field.val(), ipReg = /.*(?=.*\d)(?=.*[a-zA-Z])(?=.*[~!@#$%^&*_])./; if (typeof value != 'string' || !ipReg.test(value)) { return false; } return true; } };//不允许有空格$.fn.bootstrapValidator.validators.noSpace = { //message: "必须包含数字、英文字母、特殊字符" validate: function(validator, $field, options) { var value = $field.val(); if (typeof value != 'string' || value.indexOf(' ') > -1) { return false; } return true; } };//网关格式$.fn.bootstrapValidator.validators.mask = { //message: "网关不可达" validate: function(validator, $field, options) { var ipArr = $field.parent().parent().find('input[name="ip"]').val().split('.'), gatewayArr = $field.parent().parent().find('input[name="gateway"]').val().split('.'), value = $field.val(), netmaskArr = value.split('.'), len = 4, i = 0; if (ipArr.length !== len || gatewayArr.length !== len || netmaskArr.length !== len) { return false; } for (; i < len; i++) { if ((ipArr[i] & netmaskArr[i]) !== (gatewayArr[i] & netmaskArr[i])) { return false; } } return true; } };//邮箱 表单验证规则$.fn.bootstrapValidator.validators.mail = { //message: "邮箱格式不正确" validate: function(validator, $field, options) { var mail = /^[a-z0-9._%-]+@([a-z0-9-]+\.)+[a-z]{2,4}$/, value = $field.val(); return mail.test(value); } };//电话验证规则$.fn.bootstrapValidator.validators.phone = { //message: "0371-68787027" validate: function(validator, $field, options) { var phone = /^0\d{2,3}-\d{7,8}$/, value = $field.val(); return phone.test(value); } };//区号验证规则$.fn.bootstrapValidator.validators.ac = { //message: "区号如:010或0371" validate: function(validator, $field, options) { var ac = /^0\d{2,3}$/, value = $field.val(); return ac.test(value); } };//无区号电话验证规则$.fn.bootstrapValidator.validators.noactel = { //message: "电话格式如:68787027" validate: function(validator, $field, options) { var noactel = /^\d{7,8}$/, value = $field.val(); return noactel.test(value); } };/*默认规则 end*/$.fn.extend({ initBV: function(config) { //初始化函数 if (this.length == 0 || this[0].tagName !== 'FORM') { return false; } var $form = this.eq(0), $inputs = $form.find('input'), $errors = $form.find('.errors'), $itemBtn = $form.find('.item-btn'); //让ul.errors中显示验证项 function initTips(fields) { var validator, notEmpty, $errField; fields = fields.fields || fields; if (!fields) return false; for (var field in fields) { $errField = $form.find('#errors-' + field); $errField.hide().find('li').remove(); validators = fields[field].validators; notEmpty = false; for (var vali in validators) { $('<li/>') .addClass('text-left') .attr('data-field', field) .attr('data-vali', vali) .html(validators[vali].message) .appendTo($errField); if (vali == 'notEmpty') { notEmpty = true; } } if (notEmpty) { $errField.data('status', 'error'); } else { $errField.data('status', 'success'); } } return false; } initTips(config.fields); $form.bootstrapValidator(config) .on('success.form.bv', function(e, data) { //点击提交之后 // Prevent form submission e.preventDefault(); return false; }).on('success.field.bv', function(e, data) { var removeClass, successClass; if (data.element[0].value) { //验证成功 console.log('real success') removeClass = 'error'; addClass = 'success'; } else { //验证的其实是''(空字符串),但也被算是success事件 console.log('not success'); removeClass = 'error success'; addClass = 'normal'; } $errors.hide(); $form.find('#errors-' + data.field).show().data('status', 'success').find('li').each(function(idx, item) { $(item).removeClass(removeClass).addClass(addClass); }); }).on('error.field.bv', function(e, data) { // data.bv --> The BootstrapValidator instance // data.field --> The field name // data.element --> The field element // Get the messages of field var field = data.field; var messages = data.bv.getMessages(data.element); // Remove the field messages if they're already available $errors.hide(); $form.find('#errors-' + data.field).show().data('status', 'error').find('li').each(function(idx, item) { item = $(item); if (messages.indexOf(item.text().replace('&', '&')) > -1 || config.fields[data.field].validators.notEmpty && messages.indexOf(config.fields[data.field].validators.notEmpty.message) > -1) { item.removeClass('success').addClass('error'); } else { item.removeClass('error').addClass('success'); } }); // Hide the default message // $field.data('bv.messages') returns the default element containing the messages data.element .data('bv.messages') .find('.help-block[data-bv-for="' + data.field + '"]') .hide(); }); $inputs.blur(function(e) { $errors.hide(); }) $inputs.focus(function(e) { $errors.hide(); $(this).trigger('input'); $(this).parent().find('.totalTip').hide(); $form.find('#errors-' + this.name).show(); }) $itemBtn.click(function(e) { e.preventDefault(); $form.find('input').trigger('input'); $('.errors').hide(); return false; }); }, valiFields: function(fields) { //验证fields是否验证通过,未通过则提示信息 var status = true, fieldStatus, $errField, $errFiePar, $totalTip; fields = fields.fields || fields; if (!fields) return false; for (var field in fields) { $errField = $('#errors-' + field); fieldStatus = $errField.data('status'); if (fieldStatus == 'error') { $errFiePar = $errField.parent(), $totalTip = $errFiePar.find('.totalTip'); if ($totalTip.length) { $totalTip.show(); } else { $errFiePar.append('<span class="totalTip text-left">' + fields[field].message + '</span>'); } } status = status && fieldStatus == 'success'; } return status; } });
Required css file: bootstrap-validator-my.css (a customized default configuration file , written by an individual, unofficial file)
bootstrap-validator-my.css content is as follows:
* { margin: 0; padding: 0; box-sizing: border-box; }input,button { outline: none; }ul { list-style: none; }/*字体样式*/.text-right { text-align: right; }.text-left { text-align: left; }.text-center,.center { text-align: center; }.bold { font-weight: bold; }/*位置样式*/.relative { position: relative; }.absolute { position: absolute; }.fixed { position: fixed; }/*浮动相关*/.float,.float-left { float: left; }.float-right { float: right; }.clear:after { content: "."; display: block; height: 0; visibility: hidden; clear: both; }.pageWrap { height: auto; min-height: 100%; }/*panel start*/.panel { border: 1px solid #6AC7DC; border-radius: 4px; background: #fff; }.panel>div:first-child { border-bottom: 1px solid #6AC7DC; height: 35px; line-height: 35px; border-radius: 4px; }.panel .panel-head { padding: 0 20px; position: relative; }.panel .panel-head .panel-title { font-weight: bold; }.panel .panel-head .panel-btns { position: absolute; right: 20px; }.panel .panel-head .panel-btns span { border-radius: 5px; color: #fff; padding: 2px 8px; }.panel .panel-head .panel-btns span:hover { cursor: pointer; }.panel .panel-head .panel-btns .panel-btn-add { background: #3686D1; }.panel .panel-body { padding: 20px; }.panel .panel-body .panel-table { width: 100%; border-collapse: collapse; text-align: center; }.panel .panel-body .panel-table td,.panel .panel-body .panel-table th { border: 1px solid #E0E0E0; font-size: 14px; padding: 0 8px; font-style: normal; }.panel .panel-body .panel-table th { height: 33px; line-height: 33px; }.panel .panel-body .panel-table td { height: 28px; line-height: 28px; }/*panel end*//*所有表单元素样式 start*/.form { display: flex; justify-content: center; padding: 20px; }.form .item-txt,.form .item-sel { width: 300px; height: 30px; line-height: 30px; border: 1px solid #CCCCCC; padding: 0 10px; }.form .item-dis { background: #E3E3E3; color: #999999; }.form .item-dis:hover { cursor: not-allowed; }.form .item { font-size: 0; position: relative; margin-bottom: 15px; }.form .totalTip { position: absolute; left: 386px; top: 0; width: 235px; height: 30px; line-height: 30px; color: red; }.form .errors { width: 235px; position: absolute; left: 386px; top: 0; border: 1px solid #ddd; box-shadow: 1px 1px 1px #efefef; background: #f9f9f9; padding: 5px 10px; z-index: 100; }.form .errors li { line-height: 20px; padding-left: 18px; font-size: 12px; color: #666; font-family: Tahoma,Helvetica,"Microsoft Yahei","微软雅黑",Arial,STHeiti; background: url(reg_icons.png) no-repeat -86px -112px; }.form .errors .arrow { position: absolute; top: 8px; left: -6px; height: 0px; width: 0px; border-top: 6px solid transparent; border-right: 6px solid #ddd; border-bottom: 6px solid transparent; }.form .errors .arrow:after { content: ''; position: absolute; top: -5px; left: 1px; border-top: 5px solid transparent; border-right: 5px solid #f9f9f9; border-bottom: 5px solid transparent; }.form .errors li.normal { background-position: -86px -112px; }.form .errors li.success { background-position: -86px -128px; }.form .errors li.error { background-position: -86px -144px; color: red; }.form .item * { font-size: 14px; }.form .item .item-label { display: inline-block; }.form .item .item-btn { height: 30px; width: 300px; line-height: 30px; display: inline-block; background: #3686D1; color: #fff; font-weight: bold; text-align: center; }.form .item .item-btn:hover { cursor: pointer; }.form .error-cont { color: gray; display: inline-block; text-align: left; font-size: 12px; height: 15px; position: relative; white-space: nowrap; }.form .error-cont .icon { position: absolute; top: 1px; }.form .error-cont .tip { position: absolute; left: 20px; font-size: 12px; }.form .redtip { color: red; font-weight: bold; display: inline-block; height: 30px; line-height: 30px; }/*所有表单元素样式 end*/
The required img is:
<!DOCTYPE html><html><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>bootstrap-validator-my</title> <link rel="stylesheet" href="bootstrap-validator-my.css"> </head><body> <div class="panel"> <div class="panel-head"> </div> <div class="panel-body"> <form id="defaultForm" role="form" class="form-signin form" action="registerAccount.do" method="post"> <div class="text-right"> <div class="form-group item"> <label class="item-label" for="username">用户名:</label> <input class="form-control item-txt" type="text" name="username" id="username" /> <ul id="errors-username" data-status="" class="errors" style="display: none;"> <span class="arrow"></span> </ul> </div> <div class="form-group item"> <label class="item-label" for="ip">ip:</label> <input class="form-control item-txt" type="text" name="ip" id="ip" /> <ul id="errors-ip" data-status="" class="errors" style="display: none;"> <span class="arrow"></span> </ul> </div> <div class="form-group item"> <label class="item-label" for="password">密码:</label> <input class="form-control item-txt" type="password" name="password" id="password" /> <ul id="errors-password" data-status="" class="errors" style="display: none;"> <span class="arrow"></span> </ul> </div> <div class="form-group item"> <label class="item-label" for="newpassword">新密码:</label> <input class="form-control item-txt" type="password" name="newpassword" id="newpassword" /> <ul id="errors-newpassword" data-status="" class="errors" style="display: none;"> <span class="arrow"></span> </ul> </div> <div class="form-group item"> <label class="item-label" for="repassword">确认密码:</label> <input class="form-control item-txt" type="password" name="repassword" id="repassword" /> <ul id="errors-repassword" data-status="" class="errors" style="display: none;"> <span class="arrow"></span> </ul> </div> <div class="form-group item"> <span class="item-btn" type="submit">确认注册</span> </div> </div> </form> </div> </div> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/bootstrap-validator/0.5.3/js/bootstrapValidator.min.js"></script> <script src="bootstrap-validator-default.js"></script> <script> var config = { fields: { /*验证:规则*/ username: { //验证input项:验证规则 message: 'The username is not valid', validators: { stringLength: { min: 6, max: 30, message: '用户名长度必须在6到30之间' }, regexp: { regexp: /^[a-zA-Z0-9_\.]+$/, message: '用户名由数字字母下划线和.组成' }, notEmpty: { message: '用户名不能为空' } } }, ip: { message: 'ip无效', validators: { ip: { message: 'ip格式不正确' } } }, password: { message: '密码无效', validators: { pw: { // regexp: /.*(?=.*\d)(?=.*[a-zA-Z])(?=.*[~!@#$%^&*_])./, message: '必须包含数字、英文字母、特殊字符' }, stringLength: { min: 8, message: '密码长度须大于等于8位' } } }, newpassword: { message: '密码无效', validators: { regexp: { regexp: /.*(?=.*\d)(?=.*[a-zA-Z])(?=.*[~!@#$%^&*_])./, message: '密码没通过' }, stringLength: { min: 8, message: '密码长度须大于等于8位' }, different: { //不能和用户名相同 field: 'password', //需要进行比较的input name值 message: '新密码不能和旧密码相同' }, identical: { //相同 field: 'repassword', //需要进行比较的input name值 message: '新密码和确认密码要一致' } } }, repassword: { message: '密码无效', validators: { regexp: { regexp: /.*(?=.*\d)(?=.*[a-zA-Z])(?=.*[~!@#$%^&*_])./, message: '密码没通过' }, stringLength: { min: 8, message: '密码长度须大于等于8位' }, different: { //不能和用户名相同 field: 'password', //需要进行比较的input name值 message: '确认密码不能和旧密码相同' }, identical: { //相同 field: 'newpassword', //需要进行比较的input name值 message: '新密码和确认密码要一致' } } } } }; var $form = $('#defaultForm'); $form.initBV(config); $form.find('.item-btn').click(function(e) { if($form.valiFields(config.fields)) { console.log(1) }else { console.log(0) } }); </script></body></html>
I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website!
Related reading:
How to quickly create html header code with sublime
Summary of common functions in JS
Use to write a Sanmao quotation and paragraph
The above is the detailed content of Detailed explanation of bootstrap-validator usage (code example). For more information, please follow other related articles on the PHP Chinese website!