使用虚拟字符验证正则表达式社会安全号码

时间:2015-01-05 16:52:29

标签: regex vb.net validation

我正在修改显示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>

2 个答案:

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