1. 程式人生 > 其它 >基於async-validator的表單驗證,iView、element的通用驗證封裝函式,包含常用手機、郵箱、身份證、QQ號碼、微博賬號、最小、最大等驗證

基於async-validator的表單驗證,iView、element的通用驗證封裝函式,包含常用手機、郵箱、身份證、QQ號碼、微博賬號、最小、最大等驗證

開發基於Vue.js使用Element UI、iView UI的專案時,寫驗證和常用自定義驗證可以封裝成獨立函式,輕鬆呼叫,

包含常用手機、郵箱、身份證、QQ號碼、微博賬號、最小、最大等驗證。

validate.js

/**
 * @description 表單驗證封裝
 * @author WXF
 * @update 2019-06-20
 */
export const regExp = {
  // 10字元必填(同理20字元必填,50字元必填,1500字元必填)
  validateLen(rule, value, callback) {
    let stringLen1 = /^[\s\S]{1,10}$/
    if (!value) {
      callback(new Error('請填寫XXXX'))
    } else if (!stringLen1.test(value)) {
      callback(new Error('超過10字元限制'))
    } else {
      callback()
    }
  },
  //0-100百分比驗證
  validatepercentage(rule, value, callback) {
    let reg = /^([1-9]{1,2}$)|(^[0-9]{1,2}\.[0-9]{1,2}$)|100$/
    if (!value) {
      callback(new Error('請輸入比例'))
    } else if (!reg.test(value)) {
      callback(new Error('請輸入0-100的數字'))
    } else {
      callback()
    }
  },
  // 手機號 (eg:138********,159********)
  validatePhone(rule, value, callback, source, options, isRequired = false) {
    let regPhone = /^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/
    if (!value && !isRequired) {
      callback()
    } else if (!value) {
      callback(new Error('請輸入手機號碼'))
    } else if (!regPhone.test(value)) {
      callback(new Error('手機號格式錯誤'))
    } else {
      callback()
    }
  },
  validatevoidname(rule, value, callback) {
    if (!value) {
      callback(new Error("請輸入使用者名稱"));
    } else {
      callback();
    }
  },
  // 使用者名稱 (eg:a123456)
  validateUserName(rule, value, callback) {
    let regUserName = /^[0-9a-zA-Z]{6,16}$/
    if (!value) {
      callback(new Error('請輸入登入賬號'))
    } else if (!regUserName.test(value)) {
      callback(new Error('請輸入6-16位由字母和數字組成的登入賬號'))
    } else {
      callback()
    }
  },
  // 密碼
  validatePassword(rule, value, callback) {
    let regPassword = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,18}$/
    if (!value) {
      callback(new Error('請輸入密碼'))
    } else if (!regPassword.test(value)) {
      callback(new Error('密碼格式錯誤!必須包含6-18為字母和數字'))
    } else {
      callback()
    }
  },
  // 郵箱
  validateEmails(rule, value, callback, source, options, isRequired = false) {
    let regEmails = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/
    // console.log('isRequired is: ', JSON.stringify(isRequired))
    if (!value && !isRequired) {
      callback()
    } else if (!value) {
      callback(new Error('請輸入郵箱'))
    } else if (!regEmails.test(value)) {
      callback(new Error('郵箱格式錯誤'))
    } else {
      callback()
    }
  },
  // 金額驗證
  validateAmount(rule, value, callback, source, options, isRequired = false) {
    let regAmount = /(^[0-9]{1,10}$)|(^[0-9]{1,10}[\.]{1}[0-9]{1,2}$)/
    if (!value && !isRequired) {
      callback()
    } else if (!value) {
      callback(new Error('請輸入金額'))
    } else if (!regAmount.test(value)) {
      callback(new Error('金額格式錯誤,最多允許輸入10位整數及2位小數'))
    } else {
      callback()
    }
  },
  // 身份證驗證
  validateIdCard(rule, value, callback, source, options, isRequired = false) {
    let regIdCard = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X|x)$/
    if (!value && !isRequired) {
      callback()
    } else if (!value) {
      callback(new Error('請輸入身份證號'))
    } else if (!regIdCard.test(value)) {
      callback(new Error('身份證號碼格式錯誤'))
    } else {
      callback()
    }
  },
  // 銀行卡驗證
  validateBank(rule, value, callback, source, options, isRequired = false) {
    let regBank = /^([1-9]{1})(\d{15}|\d{16}|\d{18})$/
    if (!value && !isRequired) {
      callback()
    } else if (!value) {
      callback()
    } else if (!regBank.test(value)) {
      callback(new Error('銀行卡號碼格式錯誤'))
    } else {
      callback()
    }
  },
  // 非零正整數驗證
  validateNum(rule, value, callback) {
    let reg = /^\+?[1-9][0-9]*$/
    if (!value) {
      callback(new Error('請填寫非零正整數'))
    } else {
      if (reg.test(value) == false) {
        callback(new Error('請輸入非零的正整數'))
      } else {
        callback()
      }
    }
  },
  // 銀行卡
  validateBankCard(rule, value, callback) {
    let regBankCard = /^(\d{16}|\d{19})$/
    if (value == '') {
      callback(new Error('請輸入銀行卡號'))
    } else {
      if (regBankCard.test(value) == false) {
        callback(new Error('銀行卡號格式錯誤'))
      } else {
        callback()
      }
    }
  },
  // 固話格式
  validateTel(rule, value, callback) {
    let regTel = /^(0\d{2,3}-?)?\d{7,8}$/
    if (value == '') {
      callback(new Error('請輸入座機號碼'))
    } else {
      if (regTel.test(value) == false) {
        callback(new Error('座機號碼格式錯誤'))
      } else {
        callback()
      }
    }
  },
  // QQ號碼
  validateQQ(rule, value, callback, source, options, isRequired = false) {
    let regex = /^[1-9][0-9]{4,}$/
    if (!value && !isRequired) {
      callback()
    } else if (!value) {
      callback(new Error('請輸入QQ號碼'))
    } else {
      if (!regex.test(value)) {
        callback(new Error('QQ號碼格式錯誤'))
      } else {
        callback()
      }
    }
  },
  // weibo號
  validateWeibo(rule, value, callback, source, options, isRequired = false) {
    let regex = /^[0-9a-zA-Z\u4e00-\u9fa5_-]*$/
    if (!value && !isRequired) {
      callback()
    } else if (!value) {
      callback(new Error('請輸入微博賬號'))
    } else {
      if (!regex.test(value)) {
        callback(new Error('微博號碼格式錯誤'))
      } else {
        callback()
      }
    }
  },
}
export const validateRules = {
  range: (min, max) => [validateRules.min(min), validateRules.max(max)],
  // email: (isRequired) => ({validator: regExp.validateEmails}),
  email: (isRequired) => ({validator: (rule, value, callback, source, options) => regExp.validateEmails(rule, value, callback, source, options, isRequired)}),
  phone: (isRequired) => ({validator: (rule, value, callback, source, options) => regExp.validatePhone(rule, value, callback, source, options, isRequired)}),
  idCard: (isRequired) => ({validator: (rule, value, callback, source, options) => regExp.validateIdCard(rule, value, callback, source, options, isRequired)}),
  qq: (isRequired) => ({validator: (rule, value, callback, source, options) => regExp.validateQQ(rule, value, callback, source, options, isRequired)}),
  weibo: (isRequired) => ({validator: (rule, value, callback, source, options) => regExp.validateWeibo(rule, value, callback, source, options, isRequired)}),
  amount: (isRequired) => ({validator: (rule, value, callback, source, options) => regExp.validateAmount(rule, value, callback, source, options, isRequired)}),
  min: (minLength) => ({min: minLength, message: `最少輸入${minLength}個字元`}),
  max: (maxLength) => ({max: maxLength, message: `最多輸入${maxLength}個字元`}),
}

vue檔案中呼叫