0

我正在尝试编写一个允许不同输入集的正则表达式。

前 9 个字符应该是数字 - 123456789

10 个字符是可选的,如果存在应该是字母 - 123456789A

11 如果预设应为字母数字字符 - 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);
4

3 回答 3

1

尝试以下

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

观看现场演示

于 2013-10-13T05:01:13.343 回答
1

我不知道 c# 的正则表达式实现,但怎么样:

\d{9}[a-zA-Z]?[a-zA-Z0-9]?\d{0,3}
于 2013-10-13T04:19:23.840 回答
0

A. 您需要在字符串中的第一个引号之前放置一个 '@' 字符以将其标记为字符串文字,以便它处理 \? 适当地。

B. 我会把它分解成几个陈述,即:

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
            }
        }
    }
}
于 2013-10-13T04:33:37.010 回答