本篇主要讲述如何基于NUXT的validate方法实现表单的验证。
将验证方法封装后,使用的时候只需像:rules="filter_rules({required:true,type:'mobile'})"这么一行代码便可在页面中实现验证了。
首先看一下实现效果
一、新建一个validate.js文件:
该文档中放所需的一些验证规则,下面直接看代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | /** * Created by jiachenpan on 16/11/18. **/ export function isvalidUsername (str) { const valid_map = [ 'admin' , 'editor' ] return valid_map.indexOf(str.trim()) >= 0 } // 非负数 export function noFuNumber (str) { const reg = /^\d+(\.{0,1}\d+){0,0}$/ return reg.test(str) } // 手机号 export function isvalidMobile (str) { const reg = /^1(3|4|5|7|8)\d{9}$/ return reg.test(str) } // 中文、英文、数字 export function regexn (str) { const reg = /^[\u4e00-\u9fa5_a-zA-Z0-9]+$/ return reg.test(str) } /* 合法uri */ export function validateURL (textval) { const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov| int |mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$ #=~_-]+))*$/ return urlregex.test(textval) } /* 小写字母 */ export function validateLowerCase (str) { const reg = /^[a-z]+$/ return reg.test(str) } /* 大写字母 */ export function validateUpperCase (str) { const reg = /^[A-Z]+$/ return reg.test(str) } /* 大小写字母 */ export function validateAlphabets (str) { const reg = /^[A-Za-z]+$/ return reg.test(str) } /** * validate email * @param email * @returns {boolean} */ |
二、新建filter_rules.js文件:
该文档放验证的回调函数和验证字段。
附代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | import { isvalidMobile, regexn, noFuNumber } from '@/utils/validate' export default { install (Vue) { /** * 注意: 定义type 规则时 不用做非空验证 * 只需要传入 required:true 即可 * */ /* 验证非负数 */ const isnoFuNumber = (rule, value, callback) => { if (value != null && value !== '' ) { if (!noFuNumber(value)) { callback( new Error( '请输入非负数的数字!' )) } else { callback() } } else { callback() } } /* 验证手机号 */ const isvalidateMobile = (rule, value, callback) => { if (value != null && value !== '' ) { if (!isvalidMobile(value)) { callback( new Error( '请输入正确的手机号码!' )) } else { callback() } } else { callback() } } /* 含有非法字符(只能输入中文、英文、数字) */ const isvalidateRegexn = (rule, value, callback) => { if (value != null && value !== '' ) { if (!regexn(value)) { callback( new Error( '含有非法字符(只能输入中文、英文、数字)!' )) } else { callback() } } else { callback() } } /* 请输入正整数 */ // const isvalidateInteger= (rule, value, callback) => { // if (value != null && value != "") { // if (!integer(value)) { // callback(new Error('请输入正整数!')) // } else { // callback() // } // } // else { // callback(); // } // } /** * 参数 item * required true 必填项 * maxLength 字符串的最大长度 * min 和 max 必须同时给 min < max type=number * type 手机号 mobile * 邮箱 email * 网址 url * 各种自定义类型 定义在 src/utils/validate 中 持续添加中....... * */ Vue.prototype.filter_rules = function (item) { let rules = [] if (item.required) { rules.push({ required: true , message: '该输入项为必填项!' , trigger: 'blur' }) } if (item.maxLength) { rules.push({ min: 1, max: item.maxLength, message: '最多输入' + item.maxLength + '个字符!' , trigger: 'blur' }) } if (item.min && item.max) { rules.push({ min: item.min, max: item.max, message: '字符长度在' + item.min + '至' + item.max + '之间!' , trigger: 'blur' }) } if (item.type) { let type = item.type switch (type) { // case 'email': // rules.push({ type: 'email', message: '请输入正确的邮箱地址', trigger: 'blur,change' }) // break isnoFuNumber case 'activeOrder' : rules.push({ validator: isnoFuNumber, trigger: 'blur' }) break case 'mobile' : rules.push({ validator: isvalidateMobile, trigger: 'blur' }) break case 'name' : rules.push({ validator: isvalidateRegexn, message: '请输入正确的用户姓名' , trigger: 'blur' }) break case 'password' : rules.push({ validator: isvalidateRegexn, message: '请输入密码' , trigger: 'blur' }) break case 'org_name' : rules.push({ validator: isvalidateRegexn, message: '机构名称不能包含特殊字符' , trigger: 'blur' }) break default : rules.push({}) break } } return rules } } } |
三、在页面中引入:
1 | import Validate from '@/utils/filter_rules' |
四、在页面中使用验证:
需将验证规则写在el-form-item标签内。
需要注意的是:
这三个地方的名称要书写一致。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自学编程网。
- 本文固定链接: https://zxbcw.cn/post/220991/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)