我刚刚将这个用于检查字符串内容的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
但这似乎根本没有做任何事情。我可以输入所有字符和符号,错误页面不会触发。
这是显而易见的吗?
答案 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'\-@.]+$]"
,即确保字符串的每个字符都匹配,而不仅仅是一个字符)。