2013-03-07 5 views
3

Я пытаюсь использовать регулярное выражение, чтобы проверить, содержит ли строка только: 0-9, A-Z, a-z, \,/или -. Я использовал Regex validator = new Regex(@"[0-9a-zA-Z\-/]*"); и независимо от того, какую строку я ввожу, действительно.Регулярное выражение C# IsMatch()

Проверку выглядеть следующим образом: if(!validator.IsMatch(myString))

Что случилось?

+1

Чет проблема, ваше регулярное выражение соответствует каждой строке, как Вы заявляете в этом вопросе. – Jodrell

+1

Какие строки действительны? Или какую строку вы пытаетесь сопоставить как недействительную? –

+1

Звездный оператор означает «совпадение нуля или более раз». Каждая строка содержит каждый класс символов не менее нуля. –

ответ

4

Если я понимаю, чего вы хотите. Я считаю, что ваша схема должна быть

new Regex(@"^[0-9a-zA-Z\\\-/]*$"); 

В ^ и $ символы являются якорями, которые соответствуют началу и концу строки соответственно. Без них шаблон будет соответствовать любым строкам, содержащим любой символ в этом классе. С ними он соответствует строкам, которые только содержит только.

Вы также указали, что хотите включить символы обратной косой черты, но исходный шаблон имел \- в классе символов. Это просто escape-последовательность для дефиса в классе символов. Чтобы также включить обратную косую черту в класс символов, вам нужно указать это отдельно (также экранированное). Таким образом, полученный класс символов имеет \\ (обратная косая черта), а затем \- (дефис).

Теперь это будет по-прежнему соответствовать пустым строкам, потому что * означает «ноль или больше». если вы хотите, чтобы соответствовать только непустые строки используйте:

new Regex(@"^[0-9a-zA-Z\\\-/]+$"); 

The + означает «один или более-».

+0

Что значит + означает ??? один или больше? что это значит??? – LearnByReading

+0

@ LearnByReading Символ '+' означает, что выражение будет соответствовать одному или нескольким экземплярам предыдущего символа, класса символов или группы. Он называется [* quantifier *] (https://msdn.microsoft.com/en-us/library/3206d374 (v = vs.110) .aspx). –

0

Если я пишу Regex формы

"[some character class]*" 

будет соответствовать каждой строки. Каждая строка содержит 0 для многих классов символов.

Возможно, вы хотите использовать

new Regex(@"[0-9a-zA-Z\-/]+") 

указать 1 для многих из вашего класса персонажа.

0

Использование + вместо *

new Regex(@"[0-9a-zA-Z\-/]+"); 
Смежные вопросы