基于jQuery的前端數(shù)據(jù)通用驗(yàn)證庫(kù)
更新時(shí)間:2011年08月08日 23:12:31 作者:
做了這么長(zhǎng)時(shí)間的開發(fā),一直因?yàn)轵?yàn)證的問題相當(dāng)?shù)目鄲?,不斷的寫很多重?fù)的代碼,對(duì)想偷懶的我來說是相當(dāng)痛苦的。
于是在之前的開發(fā)之中慢慢開始總結(jié),也寫了一些零散的方法想要比較簡(jiǎn)單的,寫更少的代碼來完成更多的驗(yàn)證。之前采用的思路是傳遞參數(shù),將要驗(yàn)證的控件的ID傳進(jìn)去,若是要驗(yàn)證數(shù)據(jù)格式再傳入相應(yīng)的正則表達(dá)式進(jìn)去。項(xiàng)目結(jié)束之后,再對(duì)整個(gè)項(xiàng)目做總結(jié)的時(shí)候發(fā)現(xiàn),這種寫法也并沒有節(jié)省多少代碼量,而且很多地方因?yàn)橥瑢W(xué)反應(yīng)說我寫的那個(gè)庫(kù)并不是很好用,雖然有說明,但他們也還是不能很好的理解,不能很快就上手,而且應(yīng)該還是有不少BUG,所以很多地方他們還是寧愿用那種對(duì)每個(gè)控件去一一驗(yàn)證的方式,一個(gè)JS文件中光驗(yàn)證的部分就得兩三百行的代碼,而且都比較懶,對(duì)于注釋是能少寫一句是一句,以致于出了問題之后維護(hù)起來也很麻煩,JS調(diào)試也還沒有一個(gè)很方便的工具。
最近也是在外出差,空閑的時(shí)候我就在想,能不能在之前的基礎(chǔ)上封裝更多一點(diǎn),然后調(diào)用更方便呢,最好是調(diào)用的時(shí)候不要再寫JS代碼最好。想起jQuery強(qiáng)大的選擇器,以及之前做驗(yàn)證的時(shí)候或者需要從頁(yè)面取值的時(shí)候經(jīng)常給頁(yè)面元素加上了一些自定義的屬性。于是乎,想做驗(yàn)證的時(shí)候只需要給元素加上幾個(gè)自定義的屬性,調(diào)用JS代碼就行,這樣應(yīng)該是最簡(jiǎn)單的了吧。
這個(gè)簡(jiǎn)易的驗(yàn)證庫(kù),應(yīng)該能完成90%的基本驗(yàn)證,包括失去焦點(diǎn)時(shí)的驗(yàn)證,以及點(diǎn)擊提交按鈕時(shí)的驗(yàn)證。后端的那我就無能為辦了,只能是誰用就誰自個(gè)兒去寫了:)。
先上一段調(diào)用的代碼吧,JS代碼說少也不少了,就不直接貼出來了,文章后面上附件,還包括一個(gè)我之前自己寫的一個(gè)仿人人網(wǎng)的插件的JS文件。
<script src="Js/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="Js/ks.ext.msgbox.js" type="text/javascript"></script>
<script src="Js/validata.js" type="text/javascript"></script>
<form name="form1" id="form1" action="#" method="post">
郵 箱:<input type="text" id="email" name="email"
validata="email" errormsg="郵箱格式不正確" emptyerrormsg="郵箱不能為空" empty="false" /><br />
手 機(jī):<input type="text" name="phone" validata="phone"
errormsg="手機(jī)格式不正確" emptyerrormsg="手機(jī)不能為空" empty="true" /><br />
電 話:<input type="text" name="tel" validata="tel"
errormsg="電話格式不正確" emptyerrormsg="電話不能為空" empty="true" /><br />
身 份 證:<input type="text" name="idcard" validata="idcard" errormsg="身份證格式不正確"
emptyerrormsg="身份證不能為空" empty="false" /><br />
密 碼:<input type="password" name="pwd" validata="empty"
empty="false" emptyerrormsg="密碼不能為空" /><br />
確認(rèn)密碼:<input type="password" name="pwd1" validata="password2" errormsg="確認(rèn)密碼不能為空"
diffmsg="兩次密碼輸入不一致" /><br />
<input type="submit" id="submit1" value="Submit" />
</form>
比如驗(yàn)證郵箱:
有時(shí)候郵箱我們是允許為空的,但是一旦輸入了郵箱就要求郵箱是合法的。如果允許為空就給empty賦值為true,那么驗(yàn)證庫(kù)將不對(duì)其做非空驗(yàn)證。若為false或者empty屬性不加默認(rèn)就為是不允許為空的。 不允許為空得加上一個(gè)emptyErrorMsg的屬性,用來顯示為空時(shí)的錯(cuò)誤信息,若這個(gè)屬性缺少或者值為空那么顯示的就是一個(gè)紅色"*",若不為空就顯示這個(gè)屬性的值。然后就是對(duì)格式的驗(yàn)證,是要對(duì)郵箱驗(yàn)證,validata的值就是email,若不合法時(shí)就顯示另外一個(gè)自定義屬性errorMsg的值,errorMsg若缺少或者為空顯示錯(cuò)誤信息也為紅色"*".
validata的值還是不能完全自定義的,已經(jīng)在JS中自定好了。就是根據(jù)validata的值來返回不同的正則表達(dá)式。方法如下,然后可選的validata的值就是下列方法的regName的值。用戶若要據(jù)展直接再加上其他表達(dá)式就可以了。
//根據(jù)不同的驗(yàn)證內(nèi)容,返回相應(yīng)的正則表達(dá)式
function returnRegString(regName) {
if (regName == "email") {
return "^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$"; //郵箱
} else if (regName == "tel") {
return "^(86)?(-)?(0[0-9]{2,3})?(-)?([0-9]{7,8})(-)?([0-9]{3,5})?$"; //電話
} else if (regName == "phone") {
return "^(13[0-9]|15[0-9]|18[0-9])([0-9]{8})$"; //手機(jī)
} else if (regName == "postcode") {
return "^([0-9]{6})$"; //郵編
} else if (regName == "number") {
return "^(0|([1-9]+[0-9]*))(.[0-9]+)?$"; //數(shù)字
} else if (regName == "decimal") {
return "^[0-9]+([.][0-9]+)?$"; //浮點(diǎn)
} else if (regName == "money") {
return "^([0-9])$"; //貨幣
} else if (regName == "website") { //網(wǎng)址
return "(http://|https://){0,1}[\w\/\.\?\&\=]+";
} else if (regName == "fax") { //傳真
return "^[+]{0,1}([0-9]){1,3}[ ]?([-]?(([0-9])|[ ]){1,12})+$";
} else if (regName == "int") { //整數(shù)
return "^(-){0,1}\d+$";
} else if (regName == "pInt") { //正整數(shù)
return "^\d+$";
} else if (regName == "nInt") { //負(fù)整數(shù)
return "^-\d+$";
} else if (regName == "nandl") { //數(shù)字與字母
return "[a-zA-Z0-9]";
} else if (regName == "chinese") { //是否含有中文字符
return "[\u4e00-\u9fa5]";
}
}
廢話不多說了,該驗(yàn)證庫(kù)也還沒有很完整的測(cè)試,各位大牛們?nèi)羰怯信d趣試用一下,發(fā)現(xiàn)什么問題或者其他更好的改進(jìn)方法一定請(qǐng)告訴小弟。雖然肯定有現(xiàn)成的而且比較成熟的JS驗(yàn)證庫(kù)了,但是我想自己寫一個(gè)出來。再來一張截圖吧,點(diǎn)擊按鈕時(shí)若未通過驗(yàn)證則彈出層提示哪個(gè)地方未通過驗(yàn)證,彈出層就是我之前自己寫的仿人人網(wǎng)效果的彈出層效果。
最近也是在外出差,空閑的時(shí)候我就在想,能不能在之前的基礎(chǔ)上封裝更多一點(diǎn),然后調(diào)用更方便呢,最好是調(diào)用的時(shí)候不要再寫JS代碼最好。想起jQuery強(qiáng)大的選擇器,以及之前做驗(yàn)證的時(shí)候或者需要從頁(yè)面取值的時(shí)候經(jīng)常給頁(yè)面元素加上了一些自定義的屬性。于是乎,想做驗(yàn)證的時(shí)候只需要給元素加上幾個(gè)自定義的屬性,調(diào)用JS代碼就行,這樣應(yīng)該是最簡(jiǎn)單的了吧。
這個(gè)簡(jiǎn)易的驗(yàn)證庫(kù),應(yīng)該能完成90%的基本驗(yàn)證,包括失去焦點(diǎn)時(shí)的驗(yàn)證,以及點(diǎn)擊提交按鈕時(shí)的驗(yàn)證。后端的那我就無能為辦了,只能是誰用就誰自個(gè)兒去寫了:)。
先上一段調(diào)用的代碼吧,JS代碼說少也不少了,就不直接貼出來了,文章后面上附件,還包括一個(gè)我之前自己寫的一個(gè)仿人人網(wǎng)的插件的JS文件。
復(fù)制代碼 代碼如下:
<script src="Js/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="Js/ks.ext.msgbox.js" type="text/javascript"></script>
<script src="Js/validata.js" type="text/javascript"></script>
<form name="form1" id="form1" action="#" method="post">
郵 箱:<input type="text" id="email" name="email"
validata="email" errormsg="郵箱格式不正確" emptyerrormsg="郵箱不能為空" empty="false" /><br />
手 機(jī):<input type="text" name="phone" validata="phone"
errormsg="手機(jī)格式不正確" emptyerrormsg="手機(jī)不能為空" empty="true" /><br />
電 話:<input type="text" name="tel" validata="tel"
errormsg="電話格式不正確" emptyerrormsg="電話不能為空" empty="true" /><br />
身 份 證:<input type="text" name="idcard" validata="idcard" errormsg="身份證格式不正確"
emptyerrormsg="身份證不能為空" empty="false" /><br />
密 碼:<input type="password" name="pwd" validata="empty"
empty="false" emptyerrormsg="密碼不能為空" /><br />
確認(rèn)密碼:<input type="password" name="pwd1" validata="password2" errormsg="確認(rèn)密碼不能為空"
diffmsg="兩次密碼輸入不一致" /><br />
<input type="submit" id="submit1" value="Submit" />
</form>
比如驗(yàn)證郵箱:
有時(shí)候郵箱我們是允許為空的,但是一旦輸入了郵箱就要求郵箱是合法的。如果允許為空就給empty賦值為true,那么驗(yàn)證庫(kù)將不對(duì)其做非空驗(yàn)證。若為false或者empty屬性不加默認(rèn)就為是不允許為空的。 不允許為空得加上一個(gè)emptyErrorMsg的屬性,用來顯示為空時(shí)的錯(cuò)誤信息,若這個(gè)屬性缺少或者值為空那么顯示的就是一個(gè)紅色"*",若不為空就顯示這個(gè)屬性的值。然后就是對(duì)格式的驗(yàn)證,是要對(duì)郵箱驗(yàn)證,validata的值就是email,若不合法時(shí)就顯示另外一個(gè)自定義屬性errorMsg的值,errorMsg若缺少或者為空顯示錯(cuò)誤信息也為紅色"*".
validata的值還是不能完全自定義的,已經(jīng)在JS中自定好了。就是根據(jù)validata的值來返回不同的正則表達(dá)式。方法如下,然后可選的validata的值就是下列方法的regName的值。用戶若要據(jù)展直接再加上其他表達(dá)式就可以了。
復(fù)制代碼 代碼如下:
//根據(jù)不同的驗(yàn)證內(nèi)容,返回相應(yīng)的正則表達(dá)式
function returnRegString(regName) {
if (regName == "email") {
return "^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$"; //郵箱
} else if (regName == "tel") {
return "^(86)?(-)?(0[0-9]{2,3})?(-)?([0-9]{7,8})(-)?([0-9]{3,5})?$"; //電話
} else if (regName == "phone") {
return "^(13[0-9]|15[0-9]|18[0-9])([0-9]{8})$"; //手機(jī)
} else if (regName == "postcode") {
return "^([0-9]{6})$"; //郵編
} else if (regName == "number") {
return "^(0|([1-9]+[0-9]*))(.[0-9]+)?$"; //數(shù)字
} else if (regName == "decimal") {
return "^[0-9]+([.][0-9]+)?$"; //浮點(diǎn)
} else if (regName == "money") {
return "^([0-9])$"; //貨幣
} else if (regName == "website") { //網(wǎng)址
return "(http://|https://){0,1}[\w\/\.\?\&\=]+";
} else if (regName == "fax") { //傳真
return "^[+]{0,1}([0-9]){1,3}[ ]?([-]?(([0-9])|[ ]){1,12})+$";
} else if (regName == "int") { //整數(shù)
return "^(-){0,1}\d+$";
} else if (regName == "pInt") { //正整數(shù)
return "^\d+$";
} else if (regName == "nInt") { //負(fù)整數(shù)
return "^-\d+$";
} else if (regName == "nandl") { //數(shù)字與字母
return "[a-zA-Z0-9]";
} else if (regName == "chinese") { //是否含有中文字符
return "[\u4e00-\u9fa5]";
}
}
廢話不多說了,該驗(yàn)證庫(kù)也還沒有很完整的測(cè)試,各位大牛們?nèi)羰怯信d趣試用一下,發(fā)現(xiàn)什么問題或者其他更好的改進(jìn)方法一定請(qǐng)告訴小弟。雖然肯定有現(xiàn)成的而且比較成熟的JS驗(yàn)證庫(kù)了,但是我想自己寫一個(gè)出來。再來一張截圖吧,點(diǎn)擊按鈕時(shí)若未通過驗(yàn)證則彈出層提示哪個(gè)地方未通過驗(yàn)證,彈出層就是我之前自己寫的仿人人網(wǎng)效果的彈出層效果。
您可能感興趣的文章:
- jQuery 驗(yàn)證插件 Web前端設(shè)計(jì)模式(asp.net)
- jquery圖片延遲加載 前端開發(fā)技能必備系列
- 12款經(jīng)典的白富美型—jquery圖片輪播插件—前端開發(fā)必備
- web的各種前端打印方法之jquery打印插件PrintArea實(shí)現(xiàn)網(wǎng)頁(yè)打印
- web的各種前端打印方法之jquery打印插件jqprint實(shí)現(xiàn)網(wǎng)頁(yè)打印
- jQuery前端框架easyui使用Dialog時(shí)bug處理
- web前端設(shè)計(jì)師們常用的jQuery特效插件匯總
- jQuery前端分頁(yè)示例分享
- 14款經(jīng)典網(wǎng)頁(yè)圖片和文字特效的jQuery插件-前端開發(fā)必備
- web前端開發(fā)JQuery常用實(shí)例代碼片段(50個(gè))
相關(guān)文章
jQuery+ajax實(shí)現(xiàn)動(dòng)態(tài)執(zhí)行腳本的方法
這篇文章主要介紹了jQuery+ajax實(shí)現(xiàn)動(dòng)態(tài)執(zhí)行腳本的方法,分析了jQuery+Ajax實(shí)現(xiàn)腳本的動(dòng)態(tài)加載與執(zhí)行的技巧,需要的朋友可以參考下2015-01-01
jquery中append()與appendto()用法分析
這篇文章主要介紹了jquery中append()與appendto()用法分析,以實(shí)例的形式分析了jquery中append()與appendto()的具體語法與詳細(xì)用法,需要的朋友可以參考下2014-11-11
基于LayUI實(shí)現(xiàn)前端分頁(yè)功能的方法
下面小編就為大家?guī)硪黄贚ayUI實(shí)現(xiàn)前端分頁(yè)功能的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07
jquery實(shí)現(xiàn)非疊加式的搜索框提示效果
用JQUERY疊加兩個(gè)INPUT框來實(shí)現(xiàn)登陸中需要輸入的用戶名、密碼來實(shí)現(xiàn)提示與用戶的輸出,使用jquery在一個(gè)INPUT框中即可實(shí)現(xiàn)2014-01-01
Jquery時(shí)間驗(yàn)證和轉(zhuǎn)換工具小例子
這篇文章介紹了Jquery時(shí)間驗(yàn)證和轉(zhuǎn)換工具小例子,有需要的朋友可以參考一下2013-07-07
漢化英文版的Dreamweaver CS5并自動(dòng)提示jquery
如果從Adobe Dreamweaver CS5的官網(wǎng)上下載了一個(gè)Adobe Dreamweaver CS5,那么Adobe Dreamweaver CS5默認(rèn)你是英文版的,我們中國(guó)人還是比較習(xí)慣看漢字的。2010-11-11

