Вопрос

Я использую 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

Я забыл упомянуть, что я использовал плагин mask для своего поля ввода.Плагин mask можно найти здесь.

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

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

12345 -____

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

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top