從0開始,編寫乙個驗證函式(工具函式)

2021-09-13 02:27:10 字數 4450 閱讀 7933

之前寫專案的時候,一般都是在登入註冊,修改密碼的時候有需要些正則的需求,所以每次用到的時候都是直接從前面的**copy過去就好了,直到後台開始寫後台管理系統類的專案,複製貼上已經完全不可行了。怎麼能做乙個只會ctrl+c,ctrl+v的程式猿呢!簡直不能忍,於是就想到了自己寫乙個驗證函式,每次需要做驗證的時候只需要呼叫這個函式,傳入引數就可以了,想想都美滋滋。

做驗證的時候我們要做的,定義驗證失敗後的提示,編寫驗證的方法,然後呼叫驗證得到結果。

乙個驗證的過程,一般便是分為這幾步。

var validatorobj = ,

// 驗證的方法, 返回乙個布林值

methods: {}

},// 得到驗證結果

checkresult: {}

}

定義的錯誤提示可以自定義,至於 等則是用來做乙個識別符號,在驗證失敗後會將要驗證的引數替換掉識別符號

// 驗證失敗後的提示

messages: ',

max: '長度最多為 個字元',

min: '長度最小為 個字元',

length: '的長度在 到 個字元',

number: '必須是數字',

string: '必須是字母或者數字',

moblie: '必須是手機或者**號碼格式',

nochinese: '不能為中文',

lon: '範圍為-180.0~+180.0(必須輸入1到10位小數)',

lat: '範圍為-90.0~+90.0(必須輸入1到10位小數)',

url: '請輸入正確的訪問位址',

repeat: '兩次輸入的不一致',

email: '郵箱格式不正確',

password: '請輸入由大小寫字母+數字組成的6-16位密碼',

fixednum: '請輸入位數字'

}

在定義對應的驗證方法:

可以看到幾乎在每個驗證前面都加了乙個當資料為空的時候,返回為true,這是因為有的時候我們並不關心某乙個資料是否填寫,但一旦填寫了,又要求符合某種規則。所以如果要驗證非空的時候,需要使用兩個驗證屬性。

// 驗證的方法, 返回乙個布林值

methods: ,

max: obj => ,

min: obj => ,

length: obj => ,

number: obj => ,

string: obj => ,

moblie: obj => [\d])|(((400)-(\d)-(\d))|^((\d)|(\d|\d)-(\d)|(\d|\d)-(\d)-(\d|\d|\d|\d)|(\d)-(\d|\d|\d|\d))$)$/

return reg.test(obj.value)

},nochinese: obj => ,

lon: obj => \.\d|1[0-7]?\d\.\d|180\.0)$/

return reg.test(obj.value)

},lat: obj => \.\d|90\.0)$/

return reg.test(obj.value)

},url: obj => [pp]:\/\/|[hh][tt][pp][ss]:\/\/)(([a-za-z0-9-~]+)\.)+([a-za-z0-9-~\/])+$/

return reg.test(obj.value)

},repeat: obj => ,

email: obj => $/

return reg.test(obj.value)

},password: obj => $/

return reg.test(obj.value)

},fixednum: obj =>

}

呼叫驗證方法:

這裡是呼叫驗證函式的方法,和上面的定義結合起來。

傳入要驗證的規則,驗證的值,驗證的欄位名字,如果有條件則加上條件陣列

/** 1. 傳入驗證規則,得到驗證結果

2. @param

3. @param label: 驗證的欄位名稱

4. @param value: 驗證的值 (驗證重複的時候可以新增value1屬性)

5. @param rules: 驗證的規則陣列 例如: ['notnull', 'length'] 如果引數必填,第乙個引數為notnull

7. @return 驗證結果物件

*/// 得到驗證結果

checkresult: function (obj)

}// 如果驗證失敗, 得到驗證失敗的結果集

if (!result) ', item)})}

message = message.replace('', obj.label)

return

}return

}

把上面的步驟拼在一起,就可以完成乙個驗證函式。具體的需求和使用,可以根據專案自定義,但思路大致是這樣的。

使用示例: validate() // 驗證username不為空且長度在2-10之間

validate() // 驗證password由大小寫字母+數字組成的6-16位密碼

驗證返回結果:

/** * 傳入驗證規則,得到驗證結果

* @param

* @param label: 驗證的欄位名稱

* @param value: 驗證的值 (驗證重複的時候可以新增value1屬性)

* @param rules: 驗證的規則陣列 例如: ['notnull', 'length'] 如果引數必填,第乙個引數為notnull

* @return 驗證結果物件

*/function validate (obj) ',

max: '長度最多為 個字元',

min: '長度最小為 個字元',

length: '的長度在 到 個字元',

number: '必須是數字',

string: '必須是字母或者數字',

moblie: '必須是手機或者**號碼格式',

nochinese: '不能為中文',

lon: '範圍為-180.0~+180.0(必須輸入1到10位小數)',

lat: '範圍為-90.0~+90.0(必須輸入1到10位小數)',

url: '請輸入正確的訪問位址',

repeat: '兩次輸入的不一致',

email: '郵箱格式不正確',

password: '請輸入由大小寫字母+數字組成的6-16位密碼',

fixednum: '請輸入位數字'

},// 驗證的方法, 返回乙個布林值

methods: ,

max: obj => ,

min: obj => ,

length: obj => ,

number: obj => ,

string: obj => ,

moblie: obj => [\d])|(((400)-(\d)-(\d))|^((\d)|(\d|\d)-(\d)|(\d|\d)-(\d)-(\d|\d|\d|\d)|(\d)-(\d|\d|\d|\d))$)$/

return reg.test(obj.value)

},nochinese: obj => ,

lon: obj => \.\d|1[0-7]?\d\.\d|180\.0)$/

return reg.test(obj.value)

},lat: obj => \.\d|90\.0)$/

return reg.test(obj.value)

},url: obj => [pp]:\/\/|[hh][tt][pp][ss]:\/\/)(([a-za-z0-9-~]+)\.)+([a-za-z0-9-~\/])+$/

return reg.test(obj.value)

},repeat: obj => ,

email: obj => $/

return reg.test(obj.value)

},password: obj => $/

return reg.test(obj.value)

},fixednum: obj => }},

// 得到驗證結果

checkresult: function (obj)

}// 如果驗證失敗, 得到驗證失敗的結果集

if (!result) ', item)})}

message = message.replace('', obj.label)

return

}return

}} return validatorobj.checkresult(obj)

}export default validate

如何從0開始了解乙個儲存引擎

根據本人淺薄的經驗,了解乙個資料引擎可能涉及以下問題 目錄 1.概念 2.架構 3.部署 4.元資料 5.寫資料鏈路 6.查詢鏈路 階段總結 一些經常被關心的功能和特點 7.舊資料清理 8.資料的hash 9.離線檔案匯入匯出 10.故障恢復時間 11.對比其他db 先粗略看看是否適合自己的需求,從...

從 0 開始手寫乙個Tomcat,7 步搞定!

tomcat,這只3腳貓,大學的時候就認識了,直到現在工作中,也常會和它打交道。這是乙隻神奇的貓,今天讓我來抽象你,實現你!tomcat 是非常流行的 web server,它還是乙個滿足 servlet 規範的容器。那麼想一想,tomcat 和我們的 web 應用是什麼關係?從感性上來說,我們一般...

編寫乙個mysleep函式

在這之前,我寫了有關於訊號的相關知識,我在裡面講到了兩個函式,分別是alarm和pause兩個函式,這兩個函式是幹嘛的呢,我在這裡再介紹一遍。呼叫alarm 函式可以設定乙個鬧鐘 也就是告訴核心在 seconds 秒之後給當前程序發 sigalrm 訊號,該訊號的預設處理動作是終止當前程序。這個函式...