日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

如何使用JavaScript策略模式校驗表單

瀏覽:34日期:2023-06-06 08:43:42
概述

Web項目中,登錄,注冊等等功能都需要表單提交,當把用戶的數據提交給后臺之前,前端一般要做一些力所能及的校驗,比如是否填寫,填寫的長度,密碼是否符合規范等等,前端校驗可以避免提交不合規范的表單。

假如我們有一個表單,校驗邏輯如下:

用戶名不為空 密碼長度不低于6位 手機號符合格式未使用策略模式的表單校驗

當沒有使用策略模式時,即我們首先會想到的校驗模式通常是這樣的:

<body> <form id='registerForm'><label for='username'>輸入用戶名:<input type='text' name='username'></label><label for='password'>輸入密碼:<input type='password' name='password'></label><label for='phone'>輸入密碼:<input type='text' name='phone'></label> </form> <script>const form = document.querySelector(’.registerForm’);form.onsubmit = function(){ if(form.username.value === ’’){alert(’用戶名不能為空’)return; } if(form.password.value.length < 6){alert(’密碼長度不能小于6位’)return; } if(!/(^1[3|5|8][0-9]{9}$)/.test(form.phone.value)){alert(’手機號格式不正確’)return; }} </script></body>

這種代碼編寫方式十分常見,但它的缺點同樣很明顯:

onsubmit函數過于龐大,包含很多if-else,要覆蓋所有規則 onsubmit函數缺乏彈性,如果要進入一種新的校驗規則,就要改函數的內容實現,違反開放-閉合原則 代碼復用性較差,如果再寫一個表單,就要復制很多重復的代碼使用策略模式優化

首先封裝校驗函數為一個對象:

const strategies = { empty(value, errMsg){if(value.length === 0){ return errMsg;} }, minLength(value, len, errMsg){if(value.length < len){ return errMsg;} }, isMobile(value, errMsg){if(!/(^1[3|5|8][0-9]{9}$)/.test(value)){ return errMsg;} }}

我們還要一個Validator類, 這個類用于向目標表單添加驗證規則,它的用法如下:

const validate = function(){ const validator = new Validator(); validator.add(Form.userName, ’empty’, ’用戶名不能為空’); validator.add(Form.password, ’minLength:6’, ’密碼長度不能少于6位’); validator.add(Form.phone, ’isMobile’, ’手機號碼格式不正確’); const errMsg = validator.start(); return errMsg;}

如代碼所示,validator實例有add方法,接收3個參數,第一個為需要驗證的表單實例,第二個為驗證方法,冒號后面為傳入的參數。第三個為驗證未通過的錯誤提示信息。

start方法,用于啟動校驗,如果沒通過會返回未通過的提示信息,可在之后的邏輯中進行處理

Validator類的編寫:

class Validator { constructor(){this.rules = []; } add(elem, rule, err){const args_arr = rule.split(':');this.rules.push(()=>{ const handler = args_arr.shift(); args_arr.unshift(elem.value); args_arr.push(err); return strategies[handler].apply(elem, args_arr)}) } start(){let errmsg = []for(let i = 0; i < this.rules.length; i++ ){ const err = this.rules[i](); if(err){errmsg.push(err) }}return errmsg.join(','); }}

使用策略模式,我們使用配置的方式完成了表單的校驗,這些規則可以用在以后任何校驗表單的地方,更方便修改與復用

為單一表單項增加多個驗證規則

我們的代碼現在有一個缺點,就是只能為某一個表單項賦單一驗證規則,無法實現一個表單多個驗證規則,所以代碼還有優化的空間

class Validator{ // ··· add(elem, rules){rules.forEach(rule => { const args_arr = rule.strategy.split(':'); this.rules.push(()=>{const handler = args_arr.shift();args_arr.unshift(elem.value);args_arr.push(rule.errMsg);return strategies[handler].apply(elem, args_arr) })}); } // ···}const validate = function(){ const validator = new Validator(); validator.add(Form.username,[{strategy: ’empty’,errMsg: ’用戶名不能為空’ }]); validator.add(Form.password, [{strategy: ’minLength:6’,errMsg: ’密碼長度不能少于6位’ }]); validator.add(Form.phone, [{strategy: ’isMobile’,errMsg: ’手機號碼格式不正確’ }, {strategy: ’empty’,errMsg: ’手機號不能為空’ }]); const errMsg = validator.start(); return errMsg;}

只需要傳參時傳入一個對象數組,并在add函數里面添加相應的數組處理邏輯即可

策略模式的優點

優點:

避免多重條件選擇語句 實現開閉原則,使得函數的使用更加易于切換,易于理解,易于擴展。 提高代碼復用程度總結

Peter Norvig說過,在函數作為一等對象的語言中,策略模式是隱形,strategy就是值為函數的變量。其實就是將封裝好的策略函數當成參數傳給使用它的target,被target調用的過程,用好策略模式,不僅讓我們對該模式有更加深刻的理解,也使我們明白使用函數的好處。

以上就是如何使用JavaScript策略模式校驗表單的詳細內容,更多關于JavaScript資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美一区成人| 亚洲激情中文在线| 中文一区二区| 91国语精品自产拍| 亚洲大片在线| 美女精品一区| 夜鲁夜鲁夜鲁视频在线播放| 国产精品一区二区美女视频免费看 | 国产欧美三级| 国产美女精品视频免费播放软件| 久久黄色影视| 亚洲三级毛片| 国产伦精品一区二区三区千人斩 | 日韩**一区毛片| 国产精品激情| 国产黄大片在线观看| 国产美女高潮在线观看| 欧美激情另类| 国产精品呻吟| 国产另类在线| 国产麻豆一区| 中文在线资源| 免费视频一区二区| 久久精品一区| 日韩午夜在线| 国产精品一区二区三区美女| 亚洲最新无码中文字幕久久| 伊人成人在线视频| 国产精品片aa在线观看| 久久精品影视| 日本久久二区| 国产 日韩 欧美一区| 一本一道久久a久久| 免费成人av在线播放| 精品日韩一区| 午夜精品影视国产一区在线麻豆| 精品免费视频| 亚洲天堂av资源在线观看| 国产精品一站二站| 国产精品毛片| 亚洲电影有码| 你懂的亚洲视频| 在线亚洲免费| 中文字幕在线高清| 奇米狠狠一区二区三区| 首页国产精品| 欧美亚洲tv| 一区二区三区国产在线| 亚洲播播91| 国产成人免费| 国产精品magnet| 日本99精品| 日韩国产欧美一区二区三区| 亚洲精品网址| 久久久夜精品| 福利在线一区| 国内在线观看一区二区三区| 日本精品在线中文字幕| 国产精品一区二区三区av麻| 日韩亚洲精品在线观看| 国产亚洲精品v| 色婷婷久久久| 日韩深夜视频| 日本综合字幕| 久久国产精品成人免费观看的软件| 国产精品成久久久久| 欧美精品aa| 精品国产一区二区三区2021| 日韩av影院| 欧美激情视频一区二区三区在线播放| 成人亚洲精品| 激情中国色综合| 精品视频一二| 日韩欧美午夜| 亚洲欧洲日本mm| 久久国产精品久久w女人spa| 午夜久久黄色| 亚州av乱码久久精品蜜桃| 亚洲黑丝一区二区| 国产视频一区三区| 亚洲精品大片| 奇米777国产一区国产二区| 日本不卡一区二区三区| 三级在线观看一区二区| 亚洲精选av| 国产欧美日韩在线观看视频| 国产乱码精品| 日韩在线第七页| 女主播福利一区| 色综合视频一区二区三区日韩 | 中文字幕日韩高清在线 | 国产精品欧美一区二区三区不卡| 国产探花一区在线观看| 精品国产中文字幕第一页| 国产精品原创| 国产综合婷婷| 欧美另类专区| 国产欧美日韩在线一区二区| av在线最新| 综合激情在线| 欧美在线91| jizzjizz中国精品麻豆| 午夜宅男久久久| 久久国产精品免费精品3p| 桃色一区二区| 日韩和欧美一区二区| 亚洲播播91| 国产精品网址| 黑丝一区二区三区| 久久中文字幕一区二区| 日韩专区欧美专区| 日本不卡一区二区| 激情六月综合| 久久不卡日韩美女| 香蕉久久精品| 国产伊人久久| 欧美久久一区二区三区| 中文在线不卡| 免费av一区| 高清一区二区| 麻豆精品视频在线| 丝袜美腿亚洲一区| 欧美日韩视频网站| 欧美成人aaa| 国产亚洲欧美日韩精品一区二区三区| 红桃视频国产一区| 麻豆久久久久久久| 亚洲69av| 亚洲欧美伊人| 日韩在线视频精品| 国产盗摄——sm在线视频| 国产精品手机在线播放| 亚洲精品欧美| 亚洲一级淫片| 在线看片一区| 美国三级日本三级久久99| 一区二区三区四区在线看| 国产精品精品国产一区二区| 欧美日韩亚洲一区三区| 欧美午夜网站| 久久99精品久久久野外观看| 免费久久99精品国产自在现线| 日韩成人精品一区| 久久久久久一区二区| 日韩中文字幕高清在线观看| 在线看片福利| 久久九九99| 男女激情视频一区| 日韩免费精品| 国产精品视频3p| 国产成人久久精品麻豆二区| sm久久捆绑调教精品一区| 欧美天堂视频| 国精品一区二区| 午夜久久av| 精品久久久网| 国产日韩精品视频一区二区三区| 男女男精品视频网| 国产精品亚洲综合久久| 国产高潮在线| 鲁大师成人一区二区三区| 日本亚洲最大的色成网站www | 久久精品理论片| 欧美日韩在线网站| 欧美有码在线| 亚洲调教视频在线观看| 六月天综合网| 精品三级久久久| 日韩影院精彩在线| 国产精品一线天粉嫩av| 国产精品毛片久久久| 日韩欧美精品| 日本不卡不码高清免费观看| 国内精品美女在线观看| 亚洲一区二区免费看| 久久精品国产在热久久| 亚洲免费影视| 久久激情婷婷| 精品一区二区三区视频在线播放 | 国产一区二区三区黄网站| 欧美国产精品| 亚洲在线免费| 激情国产在线| 国产欧美在线| 影院欧美亚洲| 久久电影tv| 欧美激情视频一区二区三区免费| 日韩在线卡一卡二| 国产高清一区| 久久精品成人| 久久久国产精品一区二区中文| 国产精品s色| 国产精品a级| 精品91福利视频| 国产亚洲人成a在线v网站| 四虎精品一区二区免费| 日韩欧美一区二区三区免费看| 欧美另类中文字幕 | 亚洲欧美激情诱惑| 国产精东传媒成人av电影|