我想要一个正则表达式验证器来验证邮政编码。我的邮政编码长度最多为 9 位数字。用户可以输入 5 或 9。如果他输入 5 位数或 9 位数,我应该有效。除此之外我想提出错误。
我尝试过这个表达方式
ValidationExpression="\\d{5}(-\\d{4})?$"
这是我的设计,我正在使用 rad 控件
<telerik:RadMaskedTextBox Mask="#####-####" runat="server" ID="txtcontactZipCode"
Width="200px" ValidationGroup="contactValidation">
</telerik:RadMaskedTextBox>
<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-____
有人可以帮助我吗..
问题是,如果您有破折号,您的正则表达式表明这四位数字必须存在。一般来说,这没问题,但由于您使用的是输入掩码,破折号始终存在,即使它只有五位数字。尝试下面的表达方式。
ValidationExpression="\d{5}-?(\d{4})?$"
当您通过 C# 代码隐藏设置它时,您应该只使用
\\
来转义。
用这个...
ValidationExpression="\d{5}(-\d{4})?$"
如果您在后台通过 C# 设置它,那么您将需要
\\d
,因为 \d
将被视为控制字符...
txtcontactZipCode.ValidationExpression = "\\d{5}(-\\d{4})?$";
除非您在字符串前面加上
@
,在这种情况下,可以这样做...
txtcontactZipCode.ValidationExpression = @"\d{5}(-\d{4})?$";
怎么样:-
[0-9]{5}(\-[0-9]{4})?
[0-9]
0 到 9 之间的任意数字,{5}
= 仅 5 个字符;或者 \d
取决于您发现更容易阅读的内容。 ( )
- 创建群组\-[0-9]{4}
短划线后跟 4 个数字 ?
可选 - 零或一使用此方法:
public static boolean validateZip( String zip )
{
return zip.matches( "\\d{5}" );
}