xVal和正则表达式匹配

时间:2010-03-30 20:11:31

标签: asp.net regex xval

我正在使用xVal来验证我在asp.net MVC 1.0中的表单

不确定为什么我的正则表达式没有正确验证。

  • NOT 使用空值验证
  • 使用“1”,“12”,“123”或“1234”的值验证 NOT 验证
  • 验证值为 “12345”
  • 使用“12345”
  • 的值进行验证
  • 验证值为“12345 - ”
  • 验证值为“12345 -1”
  • 以“12345 -12”......等的值验证。

对于邮政编码,我希望有两种模式之一:

1234512345 -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() %>
<% }); %>

2 个答案:

答案 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})?$