JavaScript表單驗證

2021-09-12 01:21:43 字數 3719 閱讀 7630

大家看到這段**有何感想。

有同學會問,這有問題嗎?沒問題。只是不怎麼好看而且有些難以維護。

那麼我們來看看有沒有更好的方式吧。

本文所以的**都在這個鏈結。 github.com/link-x/veri…

首先**未動,文件先行我們先來看下這一坨東西

// 變數

var obj = ,

date: '2018-10-10 08:08'

} // 校驗規則

var rule = [

number: [

],string: [

],array: [,],

object: [

],date: [

]] // 自定義校驗規則

function

judgeobj (val, cb) esle

}複製**

現在我們的需求是有乙個變數,有乙個規則,規則對應的key去校驗變數

總之就是配置校驗,減少if else。拯救髮際線。

那麼激動人心的時候到了。開始搬磚寫**

檔案中。為了讓**看著更簡單,我們就當所有的人都不會使用出錯,所以不會對傳入的引數進行校驗是否錯誤,有興趣的同學可以自己提交

首先,定義乙個class

class

verify

// 每次例項化的時候 把需要校驗的規則和變數匯入

this.$init(data, rules)

}$init (data, rules)

iterator (rules)

// 迴圈迭代

for (let v of

object.keys(rules))

console.log(judge) // 此時我們就能獲取到所有的規則啦

console.log(this.data[v]) // 所有的資料}}

}複製**

那麼我們已經完成了初始化,並且能通過遍歷獲取到所有的規則和資料。接下來要做的事情就是,將他們一一對應,並且校驗。

孩兒們,躁動起來

我們重點寫一下這個 iterator 函式,這個寫好了,就完成了一半

// 我們抽出兩個函式來執行,自定義規則校驗吧,不如iterator太大了

class

verify

// 迴圈迭代

for (let v of

object.keys(rules))

const val = this.data[v]

if (tostring.call(judge.validator) === '[object function]')

})(status))

} else

if (judge.required) else

if (!judge.required && judge.min && judge.max)

if (status.status) }}

}複製**

好啦,這個時候核心函式 iteratior 已經寫完了。接下來我們主要的任務就是處理 this.verifytop 和 this.verifybottom 這兩個自定義規則校驗。 這裡兩個函式需要用到很多,js變數的型別校驗.

接下來我們新建乙個檔案,就叫utils.js吧,把所以的型別校驗都放在那裡。

// 直接上**,簡單粗暴.這些校驗大家應該都不陌生吧。

export

const isarray = (data) =>

export

const isnumber = (data) =>

export

const isstring = (data) =>

export

const isboolean = (data) =>

export

const isfunc = (data) =>

export

const isobject = (data) =>

export

const isnull = (data) =>

export

const arraylen = (data) =>

export

const objectlen = (data) =>

export

const isdate = (data) =>

export

const verifydate = (val) =>

export

const getlen = (val) =>

export

const getobjlen = (val) =>

export

const getnumlen = (val) =>

export

const gettype = (val) =>

export

const typeofs =

export

const gettypelen =

複製**

接著我們會到 index.js。現在我們再改造一下verify 全貌是是這樣的

import  from

'./index.js'

class

verify

this.$init(data, rules)

}$init(data, rules)

verifytop (obj, val)

verifybottom (obj, val)

iterator (rules)

let status =

for (let v of

object.keys(rules))

const val = this.data[v]

if (isfunc(judge.validator))

})(status))

} else

if (judge.required) else

if (!judge.required && judge.min && judge.max)

if (status.status)

}return status

}validate (cb) )

}}複製**

okok 大功告成。使用方式

"./utils.js">script>

"./index.js">script>

var obj = ,

date: '2018-10-10 08:08'

} var rule = [

number: [

],string: [

],array: [,],

object: [

],date: [

]]var judgeobj (val, cb) esle

}var main = new verify(obj, rule);

main.validate((e) =>

alert('err')

console.log(e.key + 'err' + e.message)

})main.$init(data, rule)

複製**

JavaScript常用表單驗證

目錄 1 js 字串長度限制 判斷字元長度 js限制輸入 限制不能輸入 textarea 長度限制 2.js判斷漢字 判斷是否漢字 只能輸入漢字 3 js判斷是否輸入英文 只能輸入英文 4 js只能輸入數字,判斷數字 驗證數字 檢測數字 判斷是否為數字 只能輸入數字 5 只能輸入英文本元和數字 6 ...

JavaScript常用表單驗證

目錄 1 js 字串長度限制 判斷字元長度 js限制輸入 限制不能輸入 textarea 長度限制 2.js判斷漢字 判斷是否漢字 只能輸入漢字 3 js判斷是否輸入英文 只能輸入英文 4 js只能輸入數字,判斷數字 驗證數字 檢測數字 判斷是否為數字 只能輸入數字 5 只能輸入英文本元和數字 6 ...

八 JavaScript 表單驗證

body script 表單驗證 functionvalidateform e mail驗證 輸入的資料必須包含 符號和點號 同時,不可以是郵件位址的首字元,並且 之後需有至少乙個點號 functionvalidateemailform script formname myform action d...