最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端Vue中常用rules校驗規(guī)則(輪子)如電話身份證郵箱等校驗方法例子

 更新時間:2023年12月07日 09:51:04   作者:是小橙丶  
當我們在開發(fā)應用時經(jīng)常需要對表單進行校驗,以確保用戶輸入的數(shù)據(jù)符合預期,這篇文章主要給大家介紹了關(guān)于前端Vue中常用rules校驗規(guī)則(輪子)如電話身份證郵箱等校驗方法的相關(guān)資料,需要的朋友可以參考下

前言

例如:隨著前端的發(fā)展,很多功能都需要在前端填寫時就先校驗是否填寫正確,則博主寫了一些校驗輪子供大家使用。

一、正則是什么?

正則表達式(regular expression)是一個描述字符規(guī)則的對象??梢杂脕頇z查一個字符串是否含有某個子字符串,將匹配的子字符串做替換或者從某個字符串中取出符合某個條件的子串等。

為什么要用正則:

前端往往有大量的表單數(shù)據(jù)校驗工作,采用正則表達式會使得數(shù)據(jù)校驗的工作量大大減輕。常用效果:郵箱、手機號、身份證號等

二、造輪子

1.電話號碼/手機號/身份證/郵箱校驗

/**
 * @description 判斷是否是手機號
 * @param value
 * @returns {boolean}
 */
export function isPhone(value) {
  const reg = /^1\d{10}$/
  return reg.test(value)
}

// 電話號碼驗證
export function validatePhone(rule, value, callback) {
  const mobilereg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/ // 手機
  const phonereg = /^0\d{2,3}-?\d{7,8}$/ // 固話
  const noAreaPhonereg = /^[1-9]\d{6,7}$/ // 無區(qū)號固話
  rule.phonetype = rule.phonetype || 'mobile'
  if (rule.phonetype === 'mobile') {
    if (value && !mobilereg.test(value))
      callback(new Error(i18n.t('common.validatePhone')))
    else callback()
  }

  if (rule.phonetype === 'phone') {
    if (value && !phonereg.test(value))
      callback(new Error(i18n.t('common.validatePhone')))
    else callback()
  }

  if (rule.phonetype === 'all') {
    if (value && !phonereg.test(value) && !mobilereg.test(value))
      callback(new Error(i18n.t('common.validatePhone')))
    else callback()
  }

  if (rule.phonetype === 'allAndNoArea') {
    if (
      value &&
      !phonereg.test(value) &&
      !mobilereg.test(value) &&
      !noAreaPhonereg.test(value)
    )
      callback(new Error(i18n.t('common.validatePhone')))
    else callback()
  }
}

/**
 * @description 判斷是否是身份證號(第二代)
 * @param value
 * @returns {boolean}
 */
export function isIdCard(value) {
  const reg =
    /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
  return reg.test(value)
}

/**
 * @description 判斷是否是郵箱
 * @param value
 * @returns {boolean}
 */
// 郵箱驗證
export function validateEmail(rule, value, callback) {
  const reg = /^([a-zA-Z]|[0-9])(\w|\-|\.)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/
  if (!value) return callback(new Error('請輸入收件人郵箱'))
  if (!reg.test(value)) {
    callback(new Error(i18n.t('common.validateEmail')))
  } else {
    callback()
  }
}


/**
 * validate IDCard 身份證
 * @returns
 */
export function validateIDCard(val) {
  if (checkCode(val)) {
    var date = val.substring(6, 14)
    if (checkDate(date)) {
      if (checkProv(val.substring(0, 2))) {
        return true
      }
    }
  }
  return false
}
/**
 * check Prov
 */
var checkProv = function (val) {
  var pattern = /^[1-9][0-9]/
  var provs = {
    11: '北京',
    12: '天津',
    13: '河北',
    14: '山西',
    15: '內(nèi)蒙古',
    21: '遼寧',
    22: '吉林',
    23: '黑龍江 ',
    31: '上海',
    32: '江蘇',
    33: '浙江',
    34: '安徽',
    35: '福建',
    36: '江西',
    37: '山東',
    41: '河南',
    42: '湖北 ',
    43: '湖南',
    44: '廣東',
    45: '廣西',
    46: '海南',
    50: '重慶',
    51: '四川',
    52: '貴州',
    53: '云南',
    54: '西藏 ',
    61: '陜西',
    62: '甘肅',
    63: '青海',
    64: '寧夏',
    65: '新疆',
    71: '臺灣',
    81: '香港',
    82: '澳門',
  }
  if (pattern.test(val)) {
    if (provs[val]) {
      return true
    }
  }
  return false
}
/**
 * check Date
 */
var checkDate = function (val) {
  var pattern = /^(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)$/
  if (pattern.test(val)) {
    var year = val.substring(0, 4)
    var month = val.substring(4, 6)
    var date = val.substring(6, 8)
    var date2 = new Date(year + '-' + month + '-' + date)
    if (date2 && date2.getMonth() == parseInt(month) - 1) {
      return true
    }
  }
  return false
}
// 校驗碼校驗
var checkCode = function (val) {
  var p =
    /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
  var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
  var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
  var code = val.substring(17)
  if (p.test(val)) {
    var sum = 0
    for (var i = 0; i < 17; i++) {
      sum += val[i] * factor[i]
    }
    if (parity[sum % 11] == code.toUpperCase()) {
      return true
    }
  }
  return false
}

2.外鏈 IP 傳統(tǒng)網(wǎng)站 端口號判斷

/**
 * @description 判讀是否為外鏈
 * @param path
 * @returns {boolean}
 */
export function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path)
}

/**
 * @description 判斷是否為IP
 * @param ip
 * @returns {boolean}
 */
export function isIP(ip) {
  const reg =
    /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
  return reg.test(ip)
}

/**
 * @description 判斷是否是傳統(tǒng)網(wǎng)站
 * @param url
 * @returns {boolean}
 */
export function isUrl(url) {
  const reg =
    /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return reg.test(url)
}

/**
 * @description 判斷是否是端口號
 * @param value
 * @returns {boolean}
 */
export function isPort(value) {
  const reg =
    /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/
  return reg.test(value)
}

3.大寫字母/小寫字母/字符串/數(shù)組

/**
 * @description 判斷是否是小寫字母
 * @param value
 * @returns {boolean}
 */
export function isLowerCase(value) {
  const reg = /^[a-z]+$/
  return reg.test(value)
}

/**
 * @description 判斷是否是大寫字母
 * @param value
 * @returns {boolean}
 */
export function isUpperCase(value) {
  const reg = /^[A-Z]+$/
  return reg.test(value)
}

/**
 * @description 判斷是否是大寫字母開頭
 * @param value
 * @returns {boolean}
 */
export function isAlphabets(value) {
  const reg = /^[A-Za-z]+$/
  return reg.test(value)
}

/**
 * @description 判斷是否是字符串
 * @param value
 * @returns {boolean}
 */
export function isString(value) {
  return typeof value === 'string' || value instanceof String
}

/**
 * @description 判斷是否是數(shù)組
 * @param arg
 */
export function isArray(arg) {
  if (typeof Array.isArray === 'undefined') {
    return Object.prototype.toString.call(arg) === '[object Array]'
  }
  return Array.isArray(arg)
}

4.經(jīng)緯度判斷

/**
 * @description 判斷經(jīng)度 -180.0~+180.0(整數(shù)部分為0~180,必須輸入1到5位小數(shù))
 * @param value
 * @returns {boolean}
 */
export function isLongitude(value) {
  const reg = /^[-|+]?(0?\d{1,2}\.\d{1,5}|1[0-7]?\d\.\d{1,5}|180\.0{1,5})$/
  return reg.test(value)
}

/**
 * @description 判斷緯度 -90.0~+90.0(整數(shù)部分為0~90,必須輸入1到5位小數(shù))
 * @param value
 * @returns {boolean}
 */
export function isLatitude(value) {
  const reg = /^[-|+]?([0-8]?\d\.\d{1,5}|90\.0{1,5})$/
  return reg.test(value)
}

5.rtsp校驗

/**
 * @description rtsp校驗,只要有rtsp://
 * @param value
 * @returns {boolean}
 */
export function isRTSP(value) {
  const reg =
    /^rtsp:\/\/([a-z]{0,10}:.{0,10}@)?(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
  const reg1 =
    /^rtsp:\/\/([a-z]{0,10}:.{0,10}@)?(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5]):[0-9]{1,5}/
  const reg2 =
    /^rtsp:\/\/([a-z]{0,10}:.{0,10}@)?(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\//
  return reg.test(value) || reg1.test(value) || reg2.test(value)
}

6.表單的一些校驗

// 只允許輸入數(shù)字或字母
export function validateIntOrLet(rule, value, callback) {
  const reg = /^[0-9a-zA-Z]+$/
  if (!reg.test(value)) {
    callback(new Error('只允許輸入數(shù)字或字母'))
  } else {
    callback()
  }
}

// 只允許輸入數(shù)字
export function validateInt(rule, value, callback) {
  const reg = /^[0-9]+$/
  if (value && !reg.test(value)) {
    callback(new Error(i18n.t('common.validateInt')))
  } else if (value && 10 < value.length) {
    callback(new Error(i18n.t('common.dataLengthTip', { number: 10 })))
  } else {
    callback()
  }
}


// 只允許輸入正整數(shù)
export function validateIntNumber(rule, value, callback) {
  const reg = /^[1-9]\d*$/
  if (value && !reg.test(value)) {
    callback(new Error(i18n.t('common.validatePositiveInt')))
  } else {
    callback()
  }
}


// 只允許輸入正整數(shù)或者含有1到4位小數(shù)的數(shù)字  0/0.0001/123
export function validateFloatNumbertoFixed(rule, value, callback) {
  value = `${value}`.trim()
  let n = Number(value)
  if (isNaN(n)) {
    return callback(new Error('請輸入數(shù)字'))
  }

  if (n === 0) {
    return callback()
  }

  // 可見小數(shù)位
  let { decimalPlaces, message } = rule
  decimalPlaces = decimalPlaces || 4
  // console.log('validateIntNumber:', rule)
  // var reg = /^[1-9]\d*(\.\d{1,4})?$/ //1到4位小數(shù)
  const reg = new RegExp(`^\\d+(\\.\\d{1,${decimalPlaces}})?$`)
  if (value && !reg.test(value)) {
    callback(new Error(message || '只允許輸入正整數(shù)或者含有1到4位小數(shù)的數(shù)字'))
  } else {
    return callback()
  }
}

三、輪子使用實例

import { validateFloatNumbertoFixed } from '@/utils/validate'

rules: {
    salePrice: [
          {
            required: true,
            message: '必填字段',
            trigger: 'change',
          },
          {
            decimalPlaces: 2,
            message: '只允許輸入正整數(shù)或者含有1到2位小數(shù)的數(shù)字',
            validator: validateFloatNumbertoFixed,
            trigger: 'blur',
          },
        ],
}    

總結(jié)

例如:以上就是今天要講的內(nèi)容,本文僅僅造了一些校驗的輪子,為我們前端工作帶來了極大的便利,有需要的同學自取

到此這篇關(guān)于前端Vue中常用rules校驗規(guī)則(輪子)如電話身份證郵箱等校驗方法的文章就介紹到這了,更多相關(guān)前端Vue常用rules校驗規(guī)則內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue 如何打開接口返回的HTML文件

    vue 如何打開接口返回的HTML文件

    本文主要介紹了vue 如何打開接口返回的HTML文件,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Vue2 Vue3 Scoped 樣式穿透問題

    Vue2 Vue3 Scoped 樣式穿透問題

    Vue中scoped樣式的作用是通過在DOM結(jié)構(gòu)和CSS樣式上添加唯一標記來實現(xiàn)樣式私有化和模塊化,這一功能是通過PostCSS轉(zhuǎn)譯實現(xiàn)的,總結(jié)了三條渲染規(guī)則:1. 為HTML DOM節(jié)點添加不重復的data屬性;2. 在每個CSS選擇器末尾添加當前組件的data屬性選擇器
    2025-01-01
  • vue實現(xiàn)iview表格添加篩選功能的示例代碼

    vue實現(xiàn)iview表格添加篩選功能的示例代碼

    本文主要介紹了vue實現(xiàn)iview表格添加篩選功能的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • vue路由實現(xiàn)登錄攔截

    vue路由實現(xiàn)登錄攔截

    這篇文章主要介紹了vue路由如何實現(xiàn)登錄攔截,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下
    2021-03-03
  • vue3 useRoute無法獲取get參數(shù)的問題解決

    vue3 useRoute無法獲取get參數(shù)的問題解決

    本文主要介紹了vue3 useRoute無法獲取get參數(shù)的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-03-03
  • Antd表格滾動 寬度自適應 不換行的實例

    Antd表格滾動 寬度自適應 不換行的實例

    這篇文章主要介紹了Antd表格滾動 寬度自適應 不換行的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • vue-resource調(diào)用promise取數(shù)據(jù)方式詳解

    vue-resource調(diào)用promise取數(shù)據(jù)方式詳解

    這篇文章主要介紹了vue-resource調(diào)用promise取數(shù)據(jù)方式詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • vue中解決異步交互數(shù)據(jù)出現(xiàn)延遲問題

    vue中解決異步交互數(shù)據(jù)出現(xiàn)延遲問題

    這篇文章主要介紹了vue中解決異步交互數(shù)據(jù)出現(xiàn)延遲問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Vue自定義Form組件實現(xiàn)方法介紹

    Vue自定義Form組件實現(xiàn)方法介紹

    這篇文章主要介紹了Vue自定義Form組件的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-10-10
  • 如何處理vue router 路由傳參刷新頁面參數(shù)丟失

    如何處理vue router 路由傳參刷新頁面參數(shù)丟失

    這篇文章主要介紹了如何處理vue router 路由傳參刷新頁面參數(shù)丟失,對vue感興趣的同學,可以參考下
    2021-05-05

最新評論

饶河县| 太仓市| 广河县| 盐城市| 台南县| 东至县| 福建省| 城固县| 阿克陶县| 木兰县| 潮州市| 密山市| 乌审旗| 莆田市| 九台市| 邮箱| 屏东县| 黎平县| 澜沧| 天气| 铁岭市| 天祝| 柞水县| 泽库县| 房山区| 沾益县| 湘潭市| 乡宁县| 巴中市| 和顺县| 阳城县| 徐闻县| 六安市| 商洛市| 东安县| 抚松县| 思南县| 定兴县| 沙雅县| 大足县| 吉木萨尔县|