2013-10-13 76 views
0

我想寫一個正則表達式,允許不同的輸入集。正則表達式在C#允許數字和字母

前9個字符應爲數值 - 123456789

10字符是可選的,並且如果存在的話應該是字母 - 123456789A

11的字符若預設應aplphanumeric - 123456789AA或123456789A1

12 - 14字符,如果預置應該是數字 - 123456789AA123或123456789A1123

我試過這個,但它不工作..

string sMatch = "^[0-9]{9}([a-zA-Z])\?{1}([0-9A-Za-z])\?{1}([0-9])?{1}([0-9])\?{1}$"; 
      System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(sMatch); 
+1

,我不認爲你可以把' {1}'在'?'之後,問號已經匹配0或1次表達式。 此外,您可以通過在創建正則表達式時指定IgnoreCase來簡化表達式。 – igelineau

回答

1

我不知道C#中的正則表達式實現,但怎麼樣:

\d{9}[a-zA-Z]?[a-zA-Z0-9]?\d{0,3} 
0

答:您需要把一個‘@’字符的第一個引號前字符串將其標記爲一個字符串字面量,因此手柄\?正常。

B.我把它分解成幾個語句,IE:

string preset1 = @"^[0-9]{9}", preset2 = @"[a-zA-Z]{1}", preset3 = @"[0-9A-Za-z]{1}", 
    preset4 = @"[0-9]{3}$"; 
if (Regex.IsMatch(input, preset1){ 
    //Do fits first preset 
    if (Regex.IsMatch(input, preset1 + preset2){ 
     //Do fits second preset 
     if (Regex.IsMatch(input, preset1 + preset2 + preset3)){ 
      //Do fits third preset 
      if (Regex.IsMatch(input, preset1 + preset2 + preset 3 + preset4)){ 
       //Do fits fourth preset 
      } 
     } 
    } 
} 
1

請嘗試以下

string sMatch = "^(?i)\\b\\d{9}[a-z]?[^\W_]?\\d{0,3}\\b$"; 

live demo

相關問題