Классический ASP - функция регулярного выражения - PullRequest
1 голос
/ 01 февраля 2012

Я только что собрал эту функцию regExp, которая проверяет содержимое строки. Строка должна содержать только цифры, буквы, полные остановки (.), Дефисы (-), знаки (@) и апострофы (').

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 Ответ

4 голосов
/ 01 февраля 2012

Во-первых, если вы хотите сопоставить буквенный дефис в классе символов, вам нужно экранировать (то есть с обратной косой чертой) его: regEx.Pattern = "[\w'\-@.]".

Во-вторых, примечание \w также позволяет использовать подчеркивания -- если вы не хотите использовать A-Za-z0-9.

Second off, похоже, что validateSearchStr просто проверяет, есть ли в вашей строке любой символ, который соответствует ваше регулярное выражение.

Таким образом, строка поиска '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'\-@.]+$]", т.е. убедитесь, что все символы строки совпадают, а не только один символ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...