Во-первых, если вы хотите сопоставить буквенный дефис в классе символов, вам нужно экранировать (то есть с обратной косой чертой) его: 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'\-@.]+$]"
, т.е. убедитесь, что все символы строки совпадают, а не только один символ).