我正在使用xVal来验证我在asp.net MVC 1.0中的表单
不确定为什么我的正则表达式没有正确验证。
对于邮政编码,我希望有两种模式之一:
12345
或12345 -1234
以下是我试过的两个正则表达式:
(\d{5})((( -)(\d{4}))?)
(\d{5})|(\d{5} -\d{4})
这是xVal
的MetaData类[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() %>
<% }); %>
答案 0 :(得分:2)
你错过了开始和结束锚点:
^\d{5}( -\d{4})?$
如果没有这些,您可以进行部分匹配。正则表达式匹配12345 -1
字符串\d{5}
: 12345
-1
,并对其进行验证。
答案 1 :(得分:1)
我没有提到我正在为输入字段使用掩码插件。 可以找到掩码插件here。
所以在文本框中,如果我只填写前5个数字,然后tab到下一个字段,由于我使用的掩码插件,将验证为false。掩码插件为空的可能性添加下划线字符....例如:
_____ -____
将成为焦点上空字段的掩码。如果我填写前5位数字,我会:
12345 -____
然后,如果我切换到下一个字段,-____
将被删除,但输入字段需要在onblur上重新验证。
所以我所做的是重新验证模糊的输入字段,现在它可以工作。
$('#Zip').blur(function() {
$(this).validate();
});
我使用此正则表达式^\d{5}( -\d{4})?$