2

我想要一个用于验证邮政编码的正则表达式验证器。我的邮政编码长度最多为 9 位。用户可以输入 5 或 9。如果他输入 5 位或 9 位,我应该有效。除此之外我想提出错误的任何事情。

我试过这个表达

ValidationExpression="\\d{5}(-\\d{4})?$"

这是我的设计,我正在使用 rad 控件

<telerik:RadMaskedTextBox Mask="#####-####" runat="server" ID="txtcontactZipCode"
                                                    Width="200px" ValidationGroup="contactValidation">
                                                </telerik:RadMaskedTextBox>
                                                &nbsp;
                                                <asp:RequiredFieldValidator runat="server" ID="rqrdcontactZipCode" ValidationGroup="contactValidation" Display="Dynamic"
                                                    ForeColor="Red" ControlToValidate="txtcontactZipCode" ErrorMessage="Zip Code is required"></asp:RequiredFieldValidator>
                                                    <asp:RegularExpressionValidator ID="regexpcontactZipCode" runat="server" ControlToValidate="txtcontactZipCode"
                                                        ValidationGroup="contactValidation" Display="Dynamic" ForeColor="Red" ErrorMessage="Should be 5 or 9 Digits"
                                                        ValidationExpression="\\d{5}(-\\d{4})?$"></asp:RegularExpressionValidator>

但是如果我输入如下,我将无法验证11111-____

有人能帮我吗..

4

4 回答 4

9

问题是您的正则表达式表明如果您有破折号,则必须存在四位数字。通常这没关系,但由于您使用的是输入掩码,因此破折号始终存在,即使它只有五位数。试试下面的表达式。

ValidationExpression="\d{5}-?(\d{4})?$"
于 2012-07-17T11:20:48.273 回答
3

\\当您通过 C# 代码隐藏设置它时,您应该只使用转义。

用这个...

ValidationExpression="\d{5}(-\d{4})?$"

如果您在后台通过 C# 设置它,那么您将需要\\d因为\d将被视为控制字符...

txtcontactZipCode.ValidationExpression = "\\d{5}(-\\d{4})?$";

除非您在字符串前面加上@,在这种情况下,它可以作为...

txtcontactZipCode.ValidationExpression = @"\d{5}(-\d{4})?$";
于 2012-07-17T11:21:23.407 回答
1

关于什么 :-[0-9]{5}(\-[0-9]{4})?

  • [0-9]0 到 9 之间的任何数字,{5}= 只有 5 个字符;Altarnativly\d取决于您觉得更容易阅读的内容。
  • ( )- 创建一个组
  • \-[0-9]{4}一个破折号后跟 4 个数字
  • ?可选 - 零或一
于 2012-07-17T11:20:40.810 回答
0

使用此方法:

public static boolean validateZip( String zip )
{
   return zip.matches( "\\d{5}" );
} 
于 2012-11-22T17:46:33.533 回答