2016-04-28 66 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

我想他只是问哪种方法更好。不知道他是否在那里提出任何特定的编码问题。 –