实现表单数据校验功能

因为项目用的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;
};

最新文章

  1. python安装包工具pip的安装
  2. SpringMVC 配置定时执行任务
  3. 每个极客都应该知道的Linux技巧
  4. bzoj2324营救皮卡丘
  5. 关于——GCD
  6. 住javaWeb分页实现(模拟百度首页)
  7. Python开发技术详解(视频+源码+文档)
  8. Mysql 使用 select into outfile
  9. 【Android Developers Training】 99. 获取联系人详细信息
  10. .NET Core+Selenium+Github+Travis CI =&gt; SiteHistory
  11. Ubuntu上64位adv无法创建问题
  12. angular 官网英雄案例 报错整理
  13. JAVA微信支付接口开发——支付
  14. 我的第一个python web开发框架(31)——定制ORM(七)
  15. python paramiko ssh登录交换机执行命令
  16. kafka为什么这么优秀!
  17. day8 大纲
  18. MSF里MS17_010利用模块笔记
  19. Jmeter 多台机器产生负载及问题解决方法
  20. angularJS1笔记-(4)-自定义服务

热门文章

  1. vue-混入( mixin 更方便的组件功能复用方法)的使用
  2. [RabbitMQ]AMQP 0-9-1:模型
  3. &#128692;‍♂️全套MySQL数据库教程_Mysql基础入门教程,零基础小白自学MySQL数据库必备教程☔ #002 # 第二单元 MySQL数据类型、操作表#
  4. AI 事件驱动场景 Serverless 实践
  5. Schematics Tools(Schematics 工具)
  6. SpringBoot-集成SpringSecurity
  7. js--typeof 和 instanceof 判断数据类型的区别及开发中的使用
  8. ClickHouse 存算分离架构探索
  9. 如何访问位于内网的Ubuntu主机
  10. vue3.x非兼容的变更