2013-02-28 3 views
0

Я не могу понять, почему это регулярное выражение не работает так, как я этого хочу. Я хочу, чтобы позволить что-то вроде этого: "test123 #% & * - Тест"Regex DataAnnotation в WPF

[RegularExpression("[^a-zA-Z0-9/#%&*\\- ]")] 

В документации MSDN дает только один пример ...

[RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$")] 

Я не хочу, чтобы ограничить вход на любую конкретную длину символа, что делает пример MSDN. Я использовал этот шаблон регулярного выражения с объектом Regex в .net, и он работает отлично. Почему бы DataAnnotations работать по-другому?

+0

DataAnnotations, насколько я знаю, не работает с WPF. – gdoron

+0

Это действительно работает. См. Это [ссылка] (http://blogs.microsoft.co.il/blogs/tomershamam/archive/2010/10/26/wpf-data-validation-using-net-data-annotations.aspx) для объяснения. – Geo242

+0

Пример MSDN имеет морковь (^) за пределами квадратных скобок, в то время как ваш пример имеет ее внутри. Я предлагаю перемещать или удалять его, поскольку вы хотите, чтобы регулярное выражение соответствовало вашему действительному значению. Но я видел другие форумы, которые показывают, что DA и WPF не работают (хотя и не пробовали это сами). – Ellesedil

ответ

1

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

Я думаю, вам нужно указать шаблон, который соответствует разрешенному вводу.

Попробуйте

[RegularExpression("^[a-zA-Z0-9/#%&*\\- ]*$")] 

* квантор делает его повторить символьный класс 0 или более раз. Это позволяет также пустую строку! Если вы не хотите, чтобы пустая строка использовала квантификатор +, это было бы одно или несколько.

* является ярлыком для {0,}. если вы опускаете второе число, это означает, что максимальное совпадение отсутствует

+ является ярлыком для {1,}.

+0

Это сработало отлично. Мне просто не хватало '*'. Благодаря! – Geo242

0

Regex DataAnnotations написан таким образом, чтобы найти то, что действительно, а не находить то, что недействительно. ВЫ ХОТИТЕ соответствовать действительным значениям.

MSDN Link

Я уроните морковь (^). Это позволит каждому отдельному персонажу, который вы поставили для проверки. Если что-то не удастся, вы создадите сообщение об ошибке.

Смежные вопросы