我验证的正确表达式是什么?

时间:2016-04-28 16:57:04

标签: regex vbscript

我在SO的帮助下创建了一个基于RegEx的验证,并将其传递给我的同事,解释了为什么需要它(将其称为白名单)。然后,同事继续更改我的代码(坚持他们所谓的黑名单)并修改了RegEx。下面列出了与每种方法相对应的代码。验证应确保只允许连字符,数字,空格和字母。我想知道

  1. 哪个代码片段实现了这个目标?
  2. 如何打破同事的代码?
  3. 黑名单只是一个条件倒置的白名单吗?
  4. 我的同事代码:

    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
    

2 个答案:

答案 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