Как разрешить '[' и ']' через проверку Regex - PullRequest
2 голосов
/ 30 марта 2012

У меня есть следующая проверка Regex, которая проверяет, что вводятся только буквы, цифры и * символы.

Regex.IsMatch(searchString, @"^[a-zA-Z0-9*]+$")

Однако я хотел бы расширить его, чтобы также принимать ( ) [ ] символов тоже.Это то, что я пробовал до сих пор, но возвращает false:

Regex.IsMatch(searchString, @"^[a-zA-Z0-9[]()*]+$")

Может кто-нибудь предложить решение?

Ответы [ 2 ]

4 голосов
/ 30 марта 2012

Escape их с помощью \:

Regex.IsMatch(searchString, @"^[a-zA-Z0-9\[\]()*]+$")

Следует отметить, что экранирующие правила различаются в зависимости от того, находится ли персонаж внутри класса символов (то есть [_chars_]) или нет.

Например - ( должен быть экранирован до \( вне класса символов, потому что в противном случае он обозначает начало группы (то есть (_something to capture_)).Другие символы, такие как ? и ., всегда должны быть экранированы, если они находятся вне класса символов.

Примечание

Я отредактировал использование термина 'персонаж группа ', потому что мне правильно указали, что, хотя я и стараюсь четко разграничить, это все же может вызвать путаницу с «группой» (захват / не захват).Регекс может быть достаточно запутанным, потому что я не буду больше мутить воду.

3 голосов
/ 30 марта 2012

Вы должны экранировать специальные символы, такие как:

Regex.IsMatch(searchString, @"^[a-zA-Z0-9\[\]()*]+$");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...