2016-04-28 127 views
0

我用SO的幫助創建了一個基於RegEx的驗證,並將它傳遞給我的同事,解釋了爲什麼需要它的原因(稱之爲白名單)。然後,同事開始更改我的代碼(堅持他們稱之爲黑名單)並修改了RegEx。下面列出了每種方法對應的代碼。驗證應確保只允許使用連字符,數字,空格和字母。我想知道什麼是我的驗證正確的正則表達式?

  1. 哪個代碼段實現了?
  2. 我怎樣才能打破我的同事的代碼?
  3. 黑名單只是白名單,條件反轉?

我的同事的代碼:

objRegExp.Pattern= "[^-A-Za-z0-9'&(). ]" 

if objRegExp.Test(strInput) then 
    FoundSpecialChar= true 
    exit function 
end if 

FoundSpecialChar= false 
Set objRegExp = Nothing 

我的代碼:

objRegExp.Pattern= "^[-A-Za-z0-9\s'&().]+" 

if objRegExp.Test(strInput) then 
    FoundSpecialChar= false 
    exit function 
end if 

FoundSpecialChar= true 
Set objRegExp = Nothing 

回答

0

你的同事的方法列出了可接受的字符。如果它甚至找到一個不在該列表中的字符,它會設置FoundSpecialChar= true這似乎是你想要的。爲了測試他的代碼和你的代碼之間的差異,你可以嘗試使用strInput = "ABCD#EFGH"運行這兩個代碼片段。

strInput = "A#"運行您的代碼一次,strInput = "#A"的另一次也應該有所幫助。

順便說一下,Set objRegExp = Nothing也應包括在Exit Function之前。

+0

好的。謝謝。這就說得通了。 – runners3431

+0

如果回答您的問題,請註冊並接受它作爲答案。如果您描述了您所做的/測試的內容以及您的解決方案是什麼,那麼我也會對這個項目的未來讀者有所幫助。 – MikeC

0

我來自測試背景,並且我已經體會到,從應用程序開發人員的角度來看,白名單方法是很好的,而且黑名單方法可以很好地測試應用程序。原因是,作爲白名單的開發人員,您可以控制允許用戶輸入的確切輸入。另一方面,作爲一名測試人員,我會更多地使用黑名單方法,因爲它將有無數個測試選項。

關於SO的有趣討論 - >blacklisting vs whitelisting in form's input filtering and validation

+0

由於這不是一個答案,你會考慮刪除它,而是將它添加爲註釋嗎? (因爲你正在添加有用的信息) – MikeC

+0

我想他只是問哪種方法更好。不知道他是否在那裏提出任何特定的編碼問題。 –