zoukankan      html  css  js  c++  java
  • [JavaScript] 实现简单的表单数据校验功能

    实现表单数据校验功能

    因为项目用的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;
    };
    
    博主ChaosBlog原创,搬运请注明。
    个人博客地址 cnblogs.com/cc1997;
    个人网站地址 Ccoding.cn
  • 相关阅读:
    Gradle中的buildScript,gradle wrapper,dependencies等一些基础知识
    在liferay 7中如何删除service builder已经生成的数据库table
    settings.gradle与build.gradle有什么区别
    如何建一个Liferay 7的theme
    如何在IDE的开发环境中启动Studio和本地build出一个product
    Lunix文件的读写权限问题
    liferay 7用OSGi的方式修改默认权限
    Liferay 7 module项目的依赖问题
    城市选择
    2016/04/26 流程 数据库lcdb 四个表 1,用户表users 2,流程表(设定有哪些流程)liucheng 3,流程发起者表(记录谁发起到哪里) 4,流程经过的人员表 flowpath (order排序)
  • 原文地址:https://www.cnblogs.com/cc1997/p/15549702.html
Copyright © 2011-2022 走看看