2015-01-05 67 views
0

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

回答

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次)

+0

在這種情況下,作爲一個devex控件,我還必須將MaskSettings重構爲「AAA-AA-0000」。加分解釋。偉大的工作,thanx! – Darkloki

+0

'[X \ d]'是否也有效? –

+0

Darkloki歡迎:),@newbiedoodle - 是的,我只是習慣於在角色類中使用範圍! –

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} 
$ 
相關問題