談談代碼健壯性之前端校驗


  對於做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> 前后端校驗至始至終保持一致.

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM