Cette fois je vais vous apporter une explication détaillée de l'utilisation de bootstrap-validator Quelles sont les précautions d'utilisation de bootstrap-validator Voici un cas pratique, jetons un oeil.
[Recommandations vidéo associées : Tutoriel Bootstrap]
Les js, css et img requis sont expliqués ci-dessous, veuillez lire patiemment !
Fichiers js requis : jquery.min.js, bootstrapValidator.min.js, bootstrap-validator-default.js (un fichier de configuration personnalisé par défaut , écrit par un fichier individuel non officiel)
Les deux premiers fichiers sont disponibles sur le cdn. Le contenu de bootstrap-validator-default.js est le suivant :
/*默认规则 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; } });
Fichier css requis : bootstrap-validator-my.css (un fichier de configuration par défaut personnalisé). , écrit par un fichier individuel non officiel)
le contenu de bootstrap-validator-my.css est le suivant :
* { 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*/
L'image requise est :
<!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>
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !
Lecture connexe :
Comment créer rapidement du code d'en-tête HTML avec sublime
Un résumé des fonctions courantes en JS
Utilisez 🎜> et des paragraphes
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!