2009-04-26 3 views
11

У меня есть следующее регулярное выражение как свойство ValidationExpression в RegularExpressionValidator в веб-форме. Когда я вводил недопустимый символ в проверяемом элементе управления, валидатор обнаруживает его и показывает сообщение об ошибке.RegularExpressionValidator не обнаруживает пустые строки

<appSettings> 
    <add key="categoryPattern" value="^[a-zA-Z0-9_+\-() ]{1,50}$" /> 
</appSettings> 

Моего валидатор:

<asp:RegularExpressionValidator ValidationExpression="<%$ AppSettings:categoryPattern %>" 

Моя сторона сервер проверка:

Regex rex = new Regex(ConfigurationManager.AppSettings["categoryPattern"]); 
if (!rex.Match(categoryName).Success) 
{ 
    throw new ArgumentException("CategoryName must match expression: " + rex); 

Как вы можете видеть, точно такой же рисунок наносится на стороне клиента и на стороне сервера.

Однако, когда я очищаю проверенный элемент управления и отправляю пустую строку, валидатор считает, что все в порядке, и я получаю сообщение об ошибке на моей стороне. Кто-нибудь знает, что здесь не так, за исключением нарушенного контракта RegularExpressionValidator?

ответ

17

Это по дизайну. Вы также должны добавить RequiredFieldValidator для принудительного ввода пользователя. RegularExpressionValidator принимает пустые поля как действительные (и даже не запускает их через Regex). Причина этого заключается в том, что, например, у вас может быть необязательное поле Email address 2 в форме, которая не требуется, но если она введена, она должна быть действительным адресом электронной почты. Чтобы добиться этого легко, другие валидаторы игнорируют пустые поля, и если вам нужно сделать их необходимыми, вы просто добавите еще один RequiredFieldValidator.

На самом деле, это не обязательно вручную revalidate на сервере. Валидаторы ASP.NET также поддерживают проверку на стороне сервера. Вы можете просто проверить свойство Page.IsValid.

+0

Благодаря @Mehrdad, я добавил RequiredFieldValidator, но проверка моего сервера не на странице, а в классе, используемом этой страницей, и потенциально другом коде, поэтому я держу это. – ProfK

+0

Добро пожаловать. –

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