当前位置:网站首页>小程序表单校验封装
小程序表单校验封装
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
})
}
边栏推荐
- Jerry's records are powered by Vbat with a power supply voltage of 4.2V [chapter]
- [micro service sentinel] @sentinelresource details
- What is the mosaic tailgate?
- 2022-07-01:某公司年会上,大家要玩一食发奖金游戏,一共有n个员工, 每个员工都有建设积分和捣乱积分, 他们需要排成一队,在队伍最前面的一定是老板
- STM32F030F4驱动TIM1637数码管芯片
- 建模和影视后期有什么关联?
- Development trend and future direction of neural network Internet of things
- from pip._ internal. cli. main import main ModuleNotFoundError: No module named ‘pip‘
- 内存泄露和内存溢出的区别是什么?
- 【无标题】
猜你喜欢

MySQL binlog cleanup

2022安全员-C证考试题模拟考试题库及模拟考试

Programming English vocabulary notebook

Linux基础 —— CentOS7 离线安装 MySQL

Istio, ebpf and rsocket Broker: in depth study of service grid

Use 3DMAX to make a chess piece

from pip._ internal. cli. main import main ModuleNotFoundError: No module named ‘pip‘

CKS CKA CKAD 将终端更改为远程桌面

2022年R1快开门式压力容器操作考题及答案
![[micro service sentinel] sentinel integrates openfeign](/img/8b/46156255fd980eb422c7e05d5af7ee.png)
[micro service sentinel] sentinel integrates openfeign
随机推荐
Daily three questions 6.30 (2)
每日三题 6.30
Jielizhi, production line assembly link [chapter]
from pip._internal.cli.main import main ModuleNotFoundError: No module named ‘pip‘
【无标题】
物联网应用技术专业是属于什么类
Jerry's records are powered by Vbat with a power supply voltage of 4.2V [chapter]
The digital summit is popular, and city chain technology has triggered a new round of business transformation
Timer和ScheduledThreadPoolExecutor的区别
Oracle中已定义者身份执行函数AUTHID DEFINER与Postgresql行为的异同
Who do you want to know when opening a stock account? Is it safe to open an account online?
Leetcode(34)——在排序数组中查找元素的第一个和最后一个位置
2021 RoboCom 世界机器人开发者大赛-高职组初赛
Understanding threads
MySQL -- convert rownum in Oracle to MySQL
Some thoughts on game performance optimization
玻璃马赛克
问题随记 —— file /usr/share/mysql/charsets/README from install of MySQL-server-5.1.73-1.glibc23.x86_64 c
Redis data types and application scenarios
共享电商的背后: 共创、共生、共享、共富,共赢的共富精神