当前位置:网站首页>小程序表单校验封装
小程序表单校验封装
2022-07-01 23:02:00 【akko_】
validate.js文件:
class Validate {
constructor(rules, form) {
if (new.target === Validate) {
this.valid = true // 校验结果
this.errorMessage = [] // 错误信息
if (rules === undefined || typeof rules !== 'object') {
throw new Error('必须传入规则对象');
} else {
this.rules = rules // 规则对象
}
if (form === undefined || typeof form !== 'object') {
throw new Error('必须传入表单对象');
} else {
this.form = form // 表单对象
}
} else {
throw new Error('必须使用 new 命令生成实例');
}
}
// 校验必填
checkRequired(field) {
if (!field) return false
return true
}
// 校验身份证
checkIdCard(field) {
if (!/^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/g.test(field))
return false
return true
}
// 校验手机号(最宽松)
checkTel(field) {
if (!/^(?:(?:\+|00)86)?1\d{10}$/g.test(field)) return false
return true
}
// 校验邮箱
checkEmail(field) {
if (!
/^(([^<>()[\]\\.,;:\[email protected]"]+(\.[^<>()[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/g
.test(field)) return false
return true
}
// 校验min
checkMin(min, field) {
if (typeof min !== "number" || typeof field !== "number") return false
if (field < min) return false
return true
}
// 校验max
checkMax(max, field) {
if (typeof max !== "number" || typeof field !== "number") return false
if (field > max) return false
return true
}
// 进行校验
__validateForm() {
// 遍历规则对象去表单数据匹配
for (const ruleItemKey of Object.keys(this.rules)) {
let ruleItem = this.rules[ruleItemKey]
for (let i = 0; i < ruleItem.length; i++) {
if (ruleItem[i].required !== undefined && ruleItem[i].required) {
this.valid = this.valid && this.checkRequired(this.form[ruleItemKey])
if (!this.checkRequired(this.form[ruleItemKey])) this.errorMessage.push(ruleItem[i].message)
}
// 该字段必填或者该字段不为空
if (ruleItem[i].required || this.form[ruleItemKey]) {
if (ruleItem[i].idcard !== undefined && ruleItem[i].idcard) {
this.valid = this.valid && this.checkIdCard(this.form[ruleItemKey])
if (!this.checkIdCard(this.form[ruleItemKey])) this.errorMessage.push(ruleItem[i].message)
}
}
if (ruleItem[i].required || this.form[ruleItemKey]) {
if (ruleItem[i].tel !== undefined && ruleItem[i].tel) {
this.valid = this.valid && this.checkTel(this.form[ruleItemKey])
if (!this.checkTel(this.form[ruleItemKey])) this.errorMessage.push(ruleItem[i].message)
}
}
if (ruleItem[i].required || this.form[ruleItemKey]) {
if (ruleItem[i].email !== undefined && ruleItem[i].email) {
this.valid = this.valid && this.checkEmail(this.form[ruleItemKey])
if (!this.checkEmail(this.form[ruleItemKey])) this.errorMessage.push(ruleItem[i].message)
}
}
if (ruleItem[i].required || this.form[ruleItemKey]) {
if (ruleItem[i].min !== undefined && ruleItem[i].min) {
this.valid = this.valid && this.checkMin(ruleItem[i].min, this.form[ruleItemKey])
if (!this.checkMin(ruleItem[i].min, this.form[ruleItemKey])) this.errorMessage.push(
ruleItem[i].message)
}
}
if (ruleItem[i].required || this.form[ruleItemKey]) {
if (ruleItem[i].max !== undefined && ruleItem[i].max) {
this.valid = this.valid && this.checkMax(ruleItem[i].max, this.form[ruleItemKey])
if (!this.checkMax(ruleItem[i].max, this.form[ruleItemKey])) this.errorMessage.push(
ruleItem[i].message)
}
}
}
}
return this.valid
}
}
export default Validate
调用方式:
import validate from "@/utils/validate.js"
lef form = {
phone:"",
code:""
}
const rules = {
phone: [{
tel: true,
message: '手机号输入不正确'
}, {
required: true,
message: '手机号不能为空'
}],
code: [{
required: true,
message: '验证码不能为空'
}]
}
const valid = new validate(rules, {
phone: phone.value,
code: code.value
})
if (valid.__validateForm()) {
// 验证成功执行
}else{
// 验证失败提示错误
uni.showToast({
title: valid.errorMessage.join(","),
icon: "none",
duration: 2000
})
}
边栏推荐
- 2022-07-01:某公司年会上,大家要玩一食发奖金游戏,一共有n个员工, 每个员工都有建设积分和捣乱积分, 他们需要排成一队,在队伍最前面的一定是老板
- 物联网应用技术专业是属于什么类
- Leetcode(34)——在排序数组中查找元素的第一个和最后一个位置
- CKS CKA ckad change terminal to remote desktop
- plain framework的实际应用和扩展
- SWT/ANR问题--SWT 导致 low memory killer(LMK)
- 2022年危险化学品经营单位安全管理人员考试题及在线模拟考试
- CADD course learning (3) -- target drug interaction
- 物联网开发零基础教程
- 力扣今日题-241. 为运算表达式设计优先级
猜你喜欢
De PIP. Interne. CLI. Main Import main modulenotfounderror: No module named 'PIP'
Jielizhi, production line assembly link [chapter]
Linux foundation - centos7 offline installation of MySQL
What is mosaic?
Development trend and future direction of neural network Internet of things
ARP报文头部格式和请求流程
Redis data types and application scenarios
Redis~02 缓存:更新数据时如何保证MySQL和Redis中的数据一致性?
2021 RoboCom 世界机器人开发者大赛-高职组初赛
CKS CKA CKAD 将终端更改为远程桌面
随机推荐
Notes to problems - file /usr/share/mysql/charsets/readme from install of mysql-server-5.1.73-1 glibc23.x86_ 64 c
flutter Unable to load asset: assets/images/888.png
CKS CKA CKAD 将终端更改为远程桌面
Postgresql源码(57)HOT更新为什么性能差距那么大?
Redis data types and application scenarios
Three development trends of enterprise application from the perspective of the third technological revolution
The digital summit is popular, and city chain technology has triggered a new round of business transformation
Timer和ScheduledThreadPoolExecutor的区别
win 10 mstsc连接 RemoteApp
URL introduction
CADD课程学习(3)-- 靶点药物相互作用
2022-07-01:某公司年会上,大家要玩一食发奖金游戏,一共有n个员工, 每个员工都有建设积分和捣乱积分, 他们需要排成一队,在队伍最前面的一定是老板
问题随记 —— file /usr/share/mysql/charsets/README from install of MySQL-server-5.1.73-1.glibc23.x86_64 c
Behind sharing e-commerce: the spirit of CO creation, symbiosis, sharing, CO prosperity and win-win
马赛克后挡板是什么?
[MySQL] index creation, viewing and deletion
2021 RoboCom 世界机器人开发者大赛-高职组初赛
关于游戏性能优化的一些感想
上海炒股开户选择手机办理安全吗?
Airserver latest win64 bit personal screen projection software