對於做WEB前端工程師的我們,一旦碰到了輸入框,我們就該具備一定的敏感思維,那便是校驗。不要小看任何一個輸入框的校驗,往往測試同學挑剔的便是這個校驗。
我們該如何處理這個校驗。毫無疑問,首先我們需要理解業務邏輯,去定義它的一系列的校驗規則,簡單舉一個通用的例子,就拿登錄的用戶名和密碼來舉例——
1> 先從兩者共性來看
(1) 是否允許為空?
(2) 輸入的前后空格如何處理(是否截斷)?
(3) 最少幾個字符,最多多少字符?
(4) 如果輸入超出最多字符,是否還允許繼續輸入?
(5) 鼠標點擊label后,是否讓光標自動聚焦於對應輸入框?
(6) 是否讓之有placeholder的提示?如果有,是否需要同時兼容IE6/7/8實現之?
(7) 如何給予友好提示——對話框、固定區域tips、輸入框后tips?
(8) 何時觸發友好提示——鍵盤的keydown/keyup/…、輸入框的change事件、點擊提交時觸發?
(9) 給出錯誤提示后,輸入光標聚焦於何處?
(10)給出錯誤提示后,再次輸入正確格式內容后的提示如何處理?何時觸發?
(11)用戶的tab鍵是否讓之有效?是什么順序?
(12)用戶的回車事件是否綁定?如果綁定,那么綁定於哪個輸入框?
(13)需要屏蔽哪些特殊字符?如空格、逗號、引號、&符號等等
2> 用戶名
(1) 是否可以有中文,如果有中文,一個中文算一個字符還是兩個字符?
(2) 是否具有固定格式——郵箱、qq號、手機號等?
(3) 是否讓之具備autocomplete自動補全提示?
3> 密碼
(1) 是否允許粘貼的形式輸入密碼(即如何處理onpaste事件)?
(2) 是否具有固定密碼格式(如幾位字母與數字的結合體等等)?
(3) 是否需要密碼強度校驗?如果需要,是怎樣的規則?
OK,讀到這里,你或許會覺得很驚奇,區區兩個輸入框罷了,為什么需要如此之多的校驗?
只能這樣回答你,所有的極限情況是程序員所必須考慮的,我們需要對任何細節的健壯性負責。
或許,你還會說,登錄這個校驗一般來講都是很復雜的,不具備通用性。
我也只能這樣回答你,校驗的松散由你們的項目而定。如果添加嚴格校驗,任何一個輸入框的校驗都不簡單。
細分一下,所有的校驗均由兩部分構成——校驗規則及提示方案。當兩者相結合去完成友好型校驗的時候,將會涉及非常復雜的處理邏輯。
面對這種情況,不要盲目去寫,先理順校驗順序、合理組織校驗規則代碼,將事半功倍。免得陷入無窮盡的校驗漩渦當中。
因此,面對任何一個輸入框,就不免需要提高“警惕”,看看它到底需要怎樣的校驗規則及提示方案。
千萬不要反反復復的等待測試同學提了一個校驗bug,再去改正一個校驗bug,這樣的溝通成本太過龐大。
需要利用好他們的測試校驗用例,不單單需要自己去考慮校驗規則,同樣需要結合他們理解的校驗規則,從而讓校驗代碼無懈可擊。
僅僅讓前端的校驗代碼無懈可擊,往往還是不夠。用戶完全可以繞過所有的檢驗規則提交表單(或者其他請求),因此,后端的校驗同樣必不可少。
那么,又有一個新的問題出現了,前端和后端的校驗一模一樣么?
我認為最好是如此,不得不承認,這確實給后端同學增加了不少壓力,似乎前端擅長的事情后端同樣也要去做,確實有點兒讓人頭疼。
這里我想着重說的是,在校驗的開發進行之前,前端與后端需要明確商定校驗規則及提示方案,最好對其校驗順序也能夠保持一致。
寫的有點兒亂,我再提取一下——
1> 培養校驗敏感思維; 2> 先明確校驗規則(包括校驗順序)及提示方案,再合理組織代碼實現之; 3> 利用好測試同學的校驗用例; 4> 前后端校驗至始至終保持一致.
