我正在修改显示SS#的现有代码。我试图弄清楚现有的验证,虽然我对正则表达式几乎一无所知。我需要做的是将现有的验证重构为ALSO接受前5个地方的虚拟字符(可能是大写的“X”),只显示最后4个有效字符。所有这些都没有弄乱现有的验证。我传入控件的内容取决于应用程序中的角色,全部数字,000000000或XXXXX0000。任何建议都将不胜感激。
<dx:ASPxTextBox ID="SSN" runat="server" CssClass="ContractTextEntry"
MaxLength="9" Width="145px" AutoPostBack="True"
ValidationSettings-RegularExpression-ValidationExpression="^(?!000)(?!666)(?!9)\d{3}([- ]?)(?!00)\d{2}\1(?!0000)\d{4}$">
<MaskSettings Mask="000-00-0000" PromptChar=" " />
<ValidationSettings SetFocusOnError="True">
<RegularExpression ErrorText="Please enter a valid SSN" />
</ValidationSettings>
</dx:ASPxTextBox>
答案 0 :(得分:1)
如果您只想接受X和前5个数字中的数字,那么它是一个相当简单的修改:
^(?!000)(?!666)(?!9)[X0-9]{3}([- ]?)(?!00)[X0-9]{2}\1(?!0000)\d{4}$
我所做的就是用\d
替换[X0-9]
(意思是任何数字)的几个实例(意思是X或0-9范围内的字符)
仅供参考 - 第一种方式后的{3}重复3次(第二种情况下的{2}意味着重复2次)
答案 1 :(得分:1)
由于您需要一些东西,要么前5个都是X,要么是所有数字。
我认为Dot-Net支持条件,但不确定组号是否匹配
我知道它支持组名有条件。
# ^(?!000)(?!666)(?!9)(?:(XXX)|\d{3})([- ]?)(?!00)(?(1)XX|\d{2})\2(?!0000)\d{4}$
^
(?! 000 )
(?! 666 )
(?! 9 )
(?:
( XXX ) # (1), XXX
| \d{3} # Or digits
)
( [- ]? ) # (2), Separator
(?! 00 )
(?(1) # Conditional, did group 1 match ?
XX # yes, get XX
| \d{2} # no, get digits
)
\2 # Backref to separator
(?! 0000 )
\d{4}
$