我在SO的帮助下创建了一个基于RegEx的验证,并将其传递给我的同事,解释了为什么需要它(将其称为白名单)。然后,同事继续更改我的代码(坚持他们所谓的黑名单)并修改了RegEx。下面列出了与每种方法相对应的代码。验证应确保只允许连字符,数字,空格和字母。我想知道
我的同事代码:
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 :(得分:0)
您同事的方法列出了可接受的字符。如果它发现甚至一个字符不在该列表中,它会设置FoundSpecialChar= true
,这似乎是你想要的。要测试他的代码与您的代码之间的差异,您可以尝试使用strInput = "ABCD#EFGH"
运行这两个代码片段。
使用strInput = "A#"
运行代码一次,使用strInput = "#A"
运行另一次代码也应该有所帮助。
顺便说一下,Set objRegExp = Nothing
之前也应该包含Exit Function
。
答案 1 :(得分:0)
我来自测试背景,我从应用程序开发人员的角度来看,Whitelist方法很好,黑名单方法很适合测试应用程序。原因是,作为开发人员,白名单可以让您控制允许用户输入的确切输入。另一方面,作为测试人员,我会更多地使用黑名单方法,因为它将有无数的选项来测试。
关于SO的有趣讨论 - > blacklisting vs whitelisting in form's input filtering and validation