前端框架中常见的公共方法汇总:自定义表单验证规则

Posted 前端阿多

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端框架中常见的公共方法汇总:自定义表单验证规则相关的知识,希望对你有一定的参考价值。

/**

  • 此方法可以全局混入 methods
  • 也可以直接复制,局部使用

**/

开始时间不能大于结束时间

    validateDateRange(stm, etm) {
      if (moment(stm) > moment(etm)) {
        this.$message({
          message: '开始时间不能大于结束时间',
          type: 'error'
        })
        return false
      }
      return true
    }
复制代码

验证字符串中只包括中文、字母(大小写)、数字

validateString(rule, value = '', callback) {
      value = value ? this.trimSpace(value) : ''
      if (rule.required && !value) {
        return callback(new Error('不能为空'))
      }
      if (!rule.required && (value === null || value.length === 0)) {
        return callback()
      }
      if (rule.minLength && value.replace(/[\\u0391-\\uFFE5]/g, 'aa').length < rule.minLength) {
        return callback(new Error('不能少于' + rule.minLength + '位字符'))
      }
      if (rule.maxLength && value.replace(/[\\u0391-\\uFFE5]/g, 'aa').length > rule.maxLength) {
        return callback(new Error('不能多于' + rule.maxLength + '位字符'))
      }

      const reg = /^[\\u4e00-\\u9fa5a-zA-Z0-9]+$/
      if (!reg.test(value)) {
        return callback(new Error('请输入中文、英文、数字'))
      } else {
        callback()
      }
    },
复制代码

func:去除字符串空格

param:
     str(目标字符串): 必填
     postion(指定空格位置): 可选  left/左侧  right/右侧  all/左右
demo: xxx=this.trimSpace(xxx,'all')
*/
复制代码
    trimSpace(str = '', positon = 'all') {
      str = str ? str.toString() : ''
      if (str) {
        switch (positon) {
          case 'left':
            str = str.replace(/^[\\s\\n\\t]+/g, '')
            break
          case 'right':
            str = str.replace(/[\\s\\n\\t]+$/g, '')
            break
          default:
            str = str.replace(/(^[\\s\\n\\t]+|[\\s\\n\\t]+$)/g, '')
            break
        }
      }
      return str
    },
复制代码

获取字符串实际 charLength(字节长度)

getCharLength(tartgetStr = '') {
      return this.trimSpace(tartgetStr).replace(/[\\u0391-\\uFFE5]/g, 'aa').length
    },
复制代码

func:自定义数字验证

 validateNumber(rule, value = '', callback) {
      value = value ? this.trimSpace(value) : ''
      if (rule.required && !value) {
        return callback(new Error('不能为空'))
      }
      if (!rule.required && (value === null || value.length === 0)) {
        return callback()
      }
      if (isNaN(value)) {
        return callback(new Error('输入数字'))
      }
      if (!isNaN(rule.maxNum) && rule.maxNum < Number(value)) {
        return callback(new Error(`最大:${rule.maxNum}`))
      }
      if (!isNaN(rule.minNum) && rule.minNum > Number(value)) {
        return callback(new Error(`最小:${rule.minNum}`))
      }
      if (rule.isInt && !/^-?\\d+$/.test(value)) {
        return callback(new Error(`输入整数。`))
      }
      if (/^\\+?[1-9][0-9]*$/.test(rule.precision) && value.toString().indexOf('.') > 0) {
        const len = value.substring(value.toString().indexOf('.') + 1).length
        if (rule.precision < len) {
          return callback(new Error(`小数点后最多保留${rule.precision}位数字。`))
        } else {
          return callback()
        }
      }
      if (rule.minLength && this.getCharLength(value) < rule.minLength) {
        return callback(new Error('最少输入' + rule.minLength + '位数字。'))
      }
      if (rule.maxLength && this.getCharLength(value) > rule.maxLength) {
        return callback(new Error('最多输入' + rule.maxLength + '位数字。'))
      } else {
        callback()
      }
    },
复制代码

验证字符串【非空、最大/最小字节(需转化为英文字符计算长度)、最大/最小长度、 是否验证非法字符 】

checkString(rule, value = '', callback) {
      value = value ? this.trimSpace(value) : ''
      if (rule.required && !value) {
        return callback(new Error('不能为空。'))
      }
      if (!rule.required && (value === null || value.length === 0)) {
        return callback()
      }
      // 只能输入 中英文数字
      if (rule.common && !/^[\\u4e00-\\u9fa5a-zA-Z0-9]+$/.test(value)) {
        return callback(new Error('请输入中文、英文、数字。'))
      }
      // 验证特殊字符
      const [regEn, regCn] = [/[`~!@#$%^&*()_+<>?:"{},.\\/;'[\\]]/im, /[·!#¥(——):;“”‘、,|《。》?、【】[\\]]/im]
      if (rule.illegal && (regCn.test(value) || regEn.test(value))) {
        return callback(new Error('含特殊符号'))
      }
      // 是否验证实际字节长度
      if (rule.toChar) {
        // char's length
        if (rule.minChar && this.getCharLength(value) < rule.minChar) {
          return callback(new Error('最少输入' + rule.minChar + '位字符。'))
        }
        if (rule.maxChar && this.getCharLength(value) > rule.maxChar) {
          return callback(new Error('最多输入' + rule.maxChar + '位字符。'))
        }
      } else {
        // string's legth
        if (rule.minLength && value.length < rule.minLength) {
          return callback(new Error('最少输入' + rule.minLength + '个字。'))
        }
        if (rule.maxLength && value.length > rule.maxLength) {
          return callback(new Error('最多输入' + rule.maxLength + '个字。'))
        }
      }
      return callback()
    }
复制代码

验证手机号【非空、手机格式 】

validateMobile(rule, value = '', callback) {
      value = value ? this.trimSpace(value) : ''
      if (rule.required && !value) {
        return callback(new Error('不能为空。'))
      }
      if (!/^1(3|4|5|6|7|8|9)\\d{9}$/.test(value) && value) {
        return callback(new Error('手机号码格式错误。'))
      }
      return callback()
    }
复制代码

验证 固定电话 格式【非空、手机格式 】

validateTelphone(rule, value = '', callback) {
      value = value ? this.trimSpace(value) : ''
      if (rule.required && !value) {
        return callback(new Error('不能为空。'))
      }
      if (!/^(0\\d{2,3}\\-)?([2-9]\\d{6,7})+(\\-\\d{1,6})?$/.test(value) && value) {
        return callback(new Error('固定电话号码格式错误。'))
      }
      return callback()
    },
复制代码

手机或者固话

  isTel(rule, value = '', callback) {
      if (!value) {
        callback()
      } else {
        const reg = /^((0\\d{2,3}-\\d{7,8})|(1[34578]\\d{9}))$/ // 校验手机号和固定电话
        const tel = reg.test(value)
        if (!tel) {
          callback(new Error('电话输入格式错误'))
        } else {
          callback()
        }
      }
    }
复制代码

邮箱

 isEmail(rule, value = '', callback) {
      if (!value) {
        callback()
      } else {
        const reg = /^([a-zA-Z]|[0-9])(\\w|\\-)+@[a-zA-Z0-9]+\\.([a-zA-Z]{2,4})$/
        const email = reg.test(value)
        if (!email) {
          callback(new Error('格式如:admin@163.com'))
        } else {
          callback()
        }
      }
    },
复制代码

邮编

isPostcode(rule, value = '', callback) {
      if (!value) {
        callback()
      } else {
        const reg = /^[0-9]{6}$/
        const postcode = reg.test(value)
        if (!postcode) {
          callback(new Error('邮编格式错误,应为6位数字'))
        } else {
          callback()
        }
      }
    },

以上是关于前端框架中常见的公共方法汇总:自定义表单验证规则的主要内容,如果未能解决你的问题,请参考以下文章

前端框架中常见的公共方法汇总:防抖节流

iview 自定义验证表单多层嵌套如何实现

组件分享之前端组件——用于自定义表单的前端组件form-create

在 Laravel 5 中使用表单请求验证时如何添加自定义验证规则

Yii2 - 表单验证规则:如何使用自定义验证功能或替代?

6月17 表单验证