2013-07-30 3 views
3

Мое приложение включает создание классов POCO во время выполнения с использованием CodeDOM. Я ищу способ разрешить моему конечному пользователю указать ограничение на значение некоторых свойств, которые он создает (например, если он добавляет свойство Email, чем он, вероятно, хотел бы проверить содержимое на адрес электронной почты. Очевидно, что у конечного пользователя могут быть дополнительные пользовательские ограничения).Как проверить правильность строки?

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

Есть ли способ убедиться, что строка, содержащаяся в поле PropertyValidation, является фактическим Regex, прежде чем разрешить это?

+2

Используйте блок «Try ... Catch» http://stackoverflow.com/questions/218680/can-i-test-if-a-regex-is-valid-in-c-sharp-without- throwing-exception – keyboardP

+0

Знают ли ваши конечные пользователи правильно писать регулярные выражения? Имейте в виду, что простой 'hi' является допустимым регулярным выражением, но может не делать того, чего хочет конечный пользователь. Кроме того, некоторые вещи (например, почтовые адреса или даже ввод HTML) не могут быть легко проверены с помощью регулярных выражений. Кроме того, плохо написанные и часто регулярные выражения могут сделать приложение медленным. – hangy

+1

Что значит ** действительный **? Это '.', Является допустимым Regex. –

ответ

7

Попытка создать Regex объект и поймать любые связанные с этим ошибки:

try { Regex reg = new Regex(userDefinedValidation); } 
catch (ArgumentException) { /* not a regex */ } 
+3

Возможно, вы захотите поймать 'ArgumentException', чтобы избежать проглатывания каких-либо неожиданных ошибок. – James

+0

good point - done –

+0

На самом деле, я только что придумал это, собирался добавить его здесь, а здесь вы сделали :) Спасибо! –

-2

если «Try-Catch путь» является слишком общим, то вы должны, например, написать регулярное выражение, которое разбирает правильные регулярные выражения;)

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