Если я понимаю, чего вы хотите. Я считаю, что ваша схема должна быть
new Regex(@"^[0-9a-zA-Z\\\-/]*$");
В ^
и $
символы являются якорями, которые соответствуют началу и концу строки соответственно. Без них шаблон будет соответствовать любым строкам, содержащим любой символ в этом классе. С ними он соответствует строкам, которые только содержит только.
Вы также указали, что хотите включить символы обратной косой черты, но исходный шаблон имел \-
в классе символов. Это просто escape-последовательность для дефиса в классе символов. Чтобы также включить обратную косую черту в класс символов, вам нужно указать это отдельно (также экранированное). Таким образом, полученный класс символов имеет \\
(обратная косая черта), а затем \-
(дефис).
Теперь это будет по-прежнему соответствовать пустым строкам, потому что *
означает «ноль или больше». если вы хотите, чтобы соответствовать только непустые строки используйте:
new Regex(@"^[0-9a-zA-Z\\\-/]+$");
The +
означает «один или более-».
Чет проблема, ваше регулярное выражение соответствует каждой строке, как Вы заявляете в этом вопросе. – Jodrell
Какие строки действительны? Или какую строку вы пытаетесь сопоставить как недействительную? –
Звездный оператор означает «совпадение нуля или более раз». Каждая строка содержит каждый класс символов не менее нуля. –