经典ASP - 正则表达式函数

时间:2012-02-01 06:45:45

标签: regex asp-classic

我刚刚将这个用于检查字符串内容的regExp函数放在一起。该字符串应仅包含数字,字母,fullstops(。),连字符( - ),符号(@)和撇号(')。

If Trim(Request("searchStr")) <> "" Then
    Function validateSearchStr(searchStr) 
        Set regEx = New RegExp 
        regEx.IgnoreCase = True
        regEx.Pattern = "[\w'-@.]" 
        validateSearchStr = regEx.Test(searchStr)
    End Function

If NOT validateSearchStr(Trim(Request("searchStr"))) Then
    Response.Redirect("error/?e=badInput")
End If
End If

但这似乎根本没有做任何事情。我可以输入所有字符和符号,错误页面不会触发。

这是显而易见的吗?

1 个答案:

答案 0 :(得分:4)

首先,如果你想匹配字符类中的文字连字符,你需要转义它(即反斜杠):regEx.Pattern = "[\w'\-@.]"

其次,注意\w也允许使用下划线 - 如果您不希望使用A-Za-z0-9

第二关,看起来validateSearchStr只是测试字符串中匹配你的正则表达式中是否有任何字符。

所以searchstring'abcasdf #ljasdf'无效,但因为它匹配[A-Za-z0-9'\-@.](例如第一个“a”匹配),所以不会抛出任何错误。

我认为您应该测试是否有任何非法字符。即:

regex.Pattern = "[^A-Za-z0-9'\-@.]"

请注意字符类中的^,其中显示“任何字符这些”。

现在,regEx.Test将返回TRUE ,如果搜索字符串中存在错误字符。 因此,请将validateSearchStr重命名为isSearchStrBad并执行:

If isSearchStrBad(...) Then
 ....

(注意,如果你想测试整个字符串是否有效,你的正则表达式必须是"^[A-Za-z0-9'\-@.]+$]",即确保字符串的每个字符都匹配,而不仅仅是一个字符)。