使用虚拟字符进行正则表达式社会安全号码验证
Regex Social Security number validation with dummy characters
我正在修改显示 SS# 的现有代码。尽管我对正则表达式几乎一无所知,但我正在尝试找出现有的验证。我需要做的是将现有的验证重构为 ALSO 接受前 5 个位置的虚拟字符(可能是大写 "X"),仅有效显示最后 4 个。所有这些 w/o 搞乱了现有的验证。我传递给控件的内容将取决于应用程序中的角色,可以是完整数字 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}(?!0000)\d{4}$">
<MaskSettings Mask="000-00-0000" PromptChar=" " />
<ValidationSettings SetFocusOnError="True">
<RegularExpression ErrorText="Please enter a valid SSN" />
</ValidationSettings>
</dx:ASPxTextBox>
如果您只想接受 X 以及前 5 个数字中的一个数字,那么这是一个相当简单的修改:
^(?!000)(?!666)(?!9)[X0-9]{3}([- ]?)(?!00)[X0-9]{2}(?!0000)\d{4}$
我所做的就是用 [X0-9]
(表示 X 或 0-9 范围内的字符)
仅供参考 - 第一个后面的 {3} 表示重复 3 次(第二个实例上的 {2} 表示重复 2 次)
由于您需要一些东西,所以前 5 个都是 X,或者它们都是数字。
我认为 Dot-Net 支持条件,但不确定组号是否匹配。
我知道它支持有条件的组名。
# ^(?!000)(?!666)(?!9)(?:(XXX)|\d{3})([- ]?)(?!00)(?(1)XX|\d{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
)
# Backref to separator
(?! 0000 )
\d{4}
$
我正在修改显示 SS# 的现有代码。尽管我对正则表达式几乎一无所知,但我正在尝试找出现有的验证。我需要做的是将现有的验证重构为 ALSO 接受前 5 个位置的虚拟字符(可能是大写 "X"),仅有效显示最后 4 个。所有这些 w/o 搞乱了现有的验证。我传递给控件的内容将取决于应用程序中的角色,可以是完整数字 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}(?!0000)\d{4}$">
<MaskSettings Mask="000-00-0000" PromptChar=" " />
<ValidationSettings SetFocusOnError="True">
<RegularExpression ErrorText="Please enter a valid SSN" />
</ValidationSettings>
</dx:ASPxTextBox>
如果您只想接受 X 以及前 5 个数字中的一个数字,那么这是一个相当简单的修改:
^(?!000)(?!666)(?!9)[X0-9]{3}([- ]?)(?!00)[X0-9]{2}(?!0000)\d{4}$
我所做的就是用 [X0-9]
(表示 X 或 0-9 范围内的字符)
仅供参考 - 第一个后面的 {3} 表示重复 3 次(第二个实例上的 {2} 表示重复 2 次)
由于您需要一些东西,所以前 5 个都是 X,或者它们都是数字。
我认为 Dot-Net 支持条件,但不确定组号是否匹配。
我知道它支持有条件的组名。
# ^(?!000)(?!666)(?!9)(?:(XXX)|\d{3})([- ]?)(?!00)(?(1)XX|\d{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
)
# Backref to separator
(?! 0000 )
\d{4}
$