2

我正在使用 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() %>
<% }); %>
4

2 回答 2

2

您缺少开始和结束锚点:

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

没有这些,您将允许部分匹配。12345 -1正则表达式通过\d{5}:匹配字符串,并对其进行验证。12345-1

于 2010-03-30T22:09:33.367 回答
1

我没有提到我正在为我的输入字段使用掩码插件。掩码插件可以在这里找到。

因此,在文本框中,如果我只填写前 5 位数字,然后跳到下一个字段,由于我使用了掩码插件,将验证为 false。掩码插件,为空的可能性放置一个下划线字符......例如:

_____ -____将是它放在焦点上的空白字段中的掩码。如果我填写前 5 位数字,我会:

12345 -____

然后,如果我切换到下一个字段,-____则会删除,但输入字段需要重新验证 onblur。

所以我所做的是重新验证模糊上的输入字段,现在它可以工作了。

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

我使用这个正则表达式^\d{5}( -\d{4})?$

于 2010-03-31T13:33:00.527 回答