xVal и Регулярное выражение Совпадают
Вопрос
Я использую 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
, и подтверждает это.