表單驗證的做法

來源:互聯網
上載者:User

標籤:密碼   簡單   ade   ++   dialog   call   hone   方法   情況   

function checkForm(from){    var from_text = $(from).find(‘input[type=text],input[type=password]‘),    isok = true,    Prompt = [        {            Type : "user",            reg : /^[\u4e00-\u9fa5]{1,10}[·.]{0,1}[\u4e00-\u9fa5]{1,10}$/,            msg : "請填寫使用者名稱",            tipe : "使用者名稱不可為空"        },{            Type :"psw",            reg :/^[a-zA-Z0-9_]\w{5,17}$/,            msg : "密碼長度為6-18位字元數字",            tipe : "密碼不可為空"        },{            Type : "name",            reg : /^[\u4e00-\u9fa5]{1,10}[·.]{0,1}[\u4e00-\u9fa5]{1,10}$/,            msg : "請填寫正確連絡人",            tipe : "連絡人不可為空"        },{            Type :"phone",            reg : /^(0|86|17951)?(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$/,            msg : "請填寫正確電話號碼",            tipe : "電話號碼不可為空"        }    ];    from_text.each(function(i){        var val = $(this).val(),        name = $(this).attr("name"),        tip = $(this).attr("myAttr"),        num = Prompt.length;        if(tip){            if (val == "") {                alert(tip+"不可為空");                 isok = false;                return false            };            for (var j = 0; j < num; j++) {                if (name == Prompt[j].Type) {                    if(!Prompt[j].reg.test(val)){                        alert(Prompt[j].msg);                        isok = false;                        return false;                    };                };            };         }      })    return isok;}

這是之前自己寫的表單驗證,缺點還是挺多需要依賴name屬性來做驗證尋找(有對應name屬性的進行驗證沒有的不驗證),空的提示內容寫在input的myttr屬性裡,每個表單的特別提示寫在Prompt裡面,依靠迴圈找到對應name進行驗證 

如果我在Prompt裡面寫很多的驗證種類那麼不就要迴圈好多次了(效率太低了咯!!!汗!!!),而且最不好的一點如果一個頁面裡有2個手機驗證而且要提交不一樣的name呢那怎麼搞那同樣的驗證不一樣name要寫2個(這不科學啊!!!)

哎呦!最近進了新公司發現同事們寫的封裝性什麼的都比我強太多了貼出來對比一;

(function (win, lib) {    var patientInfo = {        youngYear: 14,        realNameReg: /^([a-z]|[A-Z]|[\u2E80-\u9FFF]){1,8}/,        cardNumReg: /^([a-z]|[A-Z]|\d){1,18}/,        idCardReg: /^\d{17}([a-z]|[A-Z]|\d){1}/,        phoneReg: /^\d{11}$/,        verify: function (el, verifyReg, verifyAlert, ignoreNull) {            var verifyText = el.val().replace(/\t+/g, "").replace(/\n+/g, "").replace(/\r+/g, "").replace(/\s+/g, "");            if (verifyText == "") {                if (ignoreNull) {                    return false;                }                lib.hkDialog({                    type: 3,                    sureCallBack: function () {                    },                    content: verifyAlert + ‘不可為空‘,                    sureTxt: ‘我知道了‘                });                return true;            }            if (!verifyReg.test(verifyText)) {                lib.hkDialog({                    type: 3,                    sureCallBack: function () {                    },                    content: ‘請輸入正確的‘ + verifyAlert,                    sureTxt: ‘我知道了‘                });                return true;            }            return false;        }    },
//這是完美分割線----------------------------------------------------------------------------------------------
//下面是調用

submitFun: function() {  var that = this;
  $(‘.p-save‘).on(‘tap‘, function(e) {
    var PActive = $(‘.p-active‘);
    //名字
    var name = PActive.find(‘.p-name‘);
    if(that.verify(name, that.realNameReg, ‘真實姓名‘)) {return}
    //驗證完事true就是不通過
    //下面還有點什麼不重要的東西就不管了
  }
document.addEventListener(‘DOMContentLoaded‘, function (e) {        patientInfo.init();    }, false);})(window, window[‘lib‘] || (window[‘lib‘] = {}));


先說明下咯這個代碼並不全(有一些其他的相依元件),lib代表的是我們封裝起來的其他公用調用的方法庫(或者說組件調用的),像lib.hkDialog就是指的調用了一個類似彈窗提示的組件(簡單說就是alert咯)哇!這樣的封裝很好啊!!!我又get到新技能了呢!下面還是講講這個組件的實現吧!

最上邊那些正則其實和我寫的那個是一個道理就是把要用來驗證的方法,有3個參數一個是要驗證的value,一個是上吧的驗證正則,一個是提示,還有一個是可否為空白的選項

然後是去空格什麼的,先判斷ignoreNull如果是true就是可以空咯(然而我剛看到這裡的時候我就想如果我想要不可為空又不要驗證怎麼辦哦!!!我真是豬了!這樣的情況直接去頭尾空格然後判斷是否為空白不就完了!汗顏!!!)

驗證完事true就是不通過(why?我都習慣返回是fales是不通過的,反了反了!可以少寫一個!,我之前用這個找了好久問題後來看裡面代碼才發現的)
這個verify驗證裡面寫得東西好少啊!但是這樣用起來更加靈活了呢,
還比我的少了迴圈效率更好,
驗證內容和正則傳進去,提示傳進去基本上就可以了!用起來更方便靈活,以後就用這個吧!(不過我還是想把他返回的true和false反過來!嘿嘿!)

表單驗證的做法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.