[JavaScript] 实现简单的表单数据校验功能
2024-08-23 05:55:25
实现表单数据校验功能
因为项目用的UI库功能太少,表单不具备校验功能,所以自己写了一个,只有一个文件。
使用
import { required, email, useValidate } from 'validate'
let rules = {
username: { name:'邮箱号', validate: [required, email] }, // name用于错误提示,validate是需要符合的校验规则列表
password: { name:'密码', validate: [required] }
}
useValidate(formData, rules)
源文件
validate.js
// 校验的主函数
export const useValidate = (formData, rules) => {
return Promise.all(
Object.entries(rules).map(([key, rule]) => {
return Promise.all(
rule.validate.map(func => func(formData[key]))
).catch((err) => {
console.log(rule.name + err) // 错误提示(打印或弹窗)
return Promise.reject()
})
})
)
}
// 以下都是一些常见的校验方法
// 是否必填
export const required = (value) => {
return isEmpty(value) ? Promise.reject('未填写') : Promise.resolve()
}
// 数字
export const number = () => {
const reg = /^[0-9]*$/;
if (!reg.test(value)) {
return Promise.reject('应输入数字')
} else {
return Promise.resolve()
}
}
// 邮箱
export const email = (value) => {
const reg = /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/;
if (reg.test(value)) {
Promise.resolve()
} else {
return Promise.reject('格式错误')
}
}
// 大陆手机号
export const phone = (value) => {
const reg = /^(?:\+?86)?1(?:3\d{3}|5[^4\D]\d{2}|8\d{3}|7(?:[235-8]\d{2}|4(?:0\d|1[0-2]|9\d))|9[0-35-9]\d{2}|66\d{2})\d{6}$/
if (reg.test(value)) {
return Promise.resolve()
} else {
return Promise.reject('格式错误')
}
}
// URL
export const https = (value) => {
const reg = /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;
if (reg.test(value)) {
return Promise.resolve()
} else {
return Promise.reject('格式错误')
}
}
// 特殊字符
export const specialChar = () => {
const regEn = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im;
const regCn = /[·!#¥(——):;“”‘、,|《。》?、【】[\]]/im;
if (regEn.test(value) || regCn.test(value)) {
return Promise.reject('不能包含特殊字符')
} else {
return Promise.resolve()
}
}
const isEmpty = (v) => { // 为空的逻辑,可以自己看需求实现
switch (typeof v) {
case 'undefined' : return true;
case 'string' : if(v.trim().length == 0) return true; break;
case 'boolean' : if(!v) return true; break;
case 'number' : if(0 === v) return false; break;
case 'object' :
if(null === v) return true;
if(undefined !== v.length && v.length==0) return true;
for(var k in v) { return false; } return true;
break;
default: break;
}
return false;
};
最新文章
- python安装包工具pip的安装
- SpringMVC 配置定时执行任务
- 每个极客都应该知道的Linux技巧
- bzoj2324营救皮卡丘
- 关于——GCD
- 住javaWeb分页实现(模拟百度首页)
- Python开发技术详解(视频+源码+文档)
- Mysql 使用 select into outfile
- 【Android Developers Training】 99. 获取联系人详细信息
- .NET Core+Selenium+Github+Travis CI =>; SiteHistory
- Ubuntu上64位adv无法创建问题
- angular 官网英雄案例 报错整理
- JAVA微信支付接口开发——支付
- 我的第一个python web开发框架(31)——定制ORM(七)
- python paramiko ssh登录交换机执行命令
- kafka为什么这么优秀!
- day8 大纲
- MSF里MS17_010利用模块笔记
- Jmeter 多台机器产生负载及问题解决方法
- angularJS1笔记-(4)-自定义服务
热门文章
- vue-混入( mixin 更方便的组件功能复用方法)的使用
- [RabbitMQ]AMQP 0-9-1:模型
- &#128692;♂️全套MySQL数据库教程_Mysql基础入门教程,零基础小白自学MySQL数据库必备教程☔ #002 # 第二单元 MySQL数据类型、操作表#
- AI 事件驱动场景 Serverless 实践
- Schematics Tools(Schematics 工具)
- SpringBoot-集成SpringSecurity
- js--typeof 和 instanceof 判断数据类型的区别及开发中的使用
- ClickHouse 存算分离架构探索
- 如何访问位于内网的Ubuntu主机
- vue3.x非兼容的变更