xVal и совпадение регулярных выражений - PullRequest
2 голосов
/ 31 марта 2010

Я использую xVal для проверки своих форм в asp.net MVC 1.0

Не уверен, почему мое регулярное выражение не проверяется правильно.

  • Он НЕ проверяется с пустым значением
  • Он НЕ проверяется со значениями "1", "12", "123" или "1234"
  • Подтверждается значением "12345"
  • Подтверждается значением "12345"
  • Подтверждается значением «12345 -»
  • Подтверждается значением "12345 -1"
  • Подтверждается значением "12345 -12" ... и т. Д.

Для почтового индекса я ожидаю один из двух шаблонов:

12345 или 12345 -1234

Вот два регулярных выражения, которые я пробовал:

(\d{5})((( -)(\d{4}))?)

(\d{5})|(\d{5} -\d{4})

Вот мой класс метаданных для xVal

[MetadataType(typeof(TIDProfileMetadata))]
public class TIDProfileStep
{
   public class TIDProfileMetadata
   {
       [Required(ErrorMessage = " [Required] ")]
       [RegularExpression(@"(\d{5})|(\d{5} -\d{4})", ErrorMessage = " Invalid Zip ")]
       public string Zip { get; set; }
   }
}

Вот моя страница aspx:

<% Html.BeginForm("Edit", "Profile", FormMethod.Post); %>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
   <td>
      <h6>Zip:</h6>
   </td>
   <td>
      <%= Html.TextBox("Profile.Zip")%>
   </td>
</tr>
<tr>
   <td>
      <input type="submit"/>
   </td> 
</tr>
</table>
<% Html.EndForm(); %>

<% Html.Telerik().ScriptRegistrar()
        .OnDocumentReady(() =>
   { %>
   <%= Html.ClientSideValidation<TIDProfileStep>("Profile").SuppressScriptTags() %>
<% }); %>

Ответы [ 2 ]

2 голосов
/ 31 марта 2010

Вам не хватает начального и конечного якорей:

^\d{5}( -\d{4})?$

Без них вы разрешаете частичное совпадение. Регулярное выражение сопоставляет строку 12345 -1 с \d{5}: 12345-1 и проверяет ее.

1 голос
/ 31 марта 2010

Мне не удалось упомянуть, что я использовал плагин маски для своего поля ввода. Плагин маски можно найти здесь .

Так что в текстовом поле, если бы я должен был заполнить только первые 5 цифр, а затем перейти к следующему полю, это подтвердило бы значение false из-за используемого мной плагина маски. Плагин маска, вставляет символ подчеркивания для пустых возможностей .... Так, например:

_____ -____ будет маской, которая будет помещена в пустое поле фокуса. Если я введу первые 5 цифр, я получу:

12345 -____

Тогда, если я перейду к следующему полю, -____ удаляется, но поле ввода необходимо повторно проверить на.

Итак, я снова проверил поле ввода на размытие, и теперь оно работает.

$('#Zip').blur(function() {
        $(this).validate();
});

Я использую это регулярное выражение ^\d{5}( -\d{4})?$

...