2

我需要一个regex来匹配这个模式(使用 C#)

我的比赛必须以 2 个字母字符( MA 或 CA )开头,并且必须以 6 位或 7 位数字结尾;如 CA123456 或 MA123456 或 MA1234567

这是我尝试过的:

Regex.IsMatch(StringInput, @"^[MA]{2}|^[CA]{2}\d{6,7}?")) 

不幸的是,它似乎与大多数东西相匹配

4

2 回答 2

5

试试这个模式:

^[MC]A\d{6,7}$

前导字符类 ( [MC])在字符串的开头需要 aM或 a 。C之后,\d{6,7}匹配 6 位或 7 位数字。


您的模式的问题是第一个选择:匹配任何以、、或^[MA]{2}开头的字符串。它根本不需要任何后续数字。由于正则表达式引擎可以匹配AA1234567之类的字符串的第一个替代项(匹配子字符串AA),因此它甚至不会尝试找到另一个匹配项。这就是为什么AAAMMAMM

它似乎与大多数东西相匹配。

于 2013-11-10T15:49:38.680 回答
0

I believe there are great usages of RegEx; in this particular case, using the built-in string functions of C# may be a better option:

  1. Must start with either MA or CA
  2. Must end with at least 6 digits (if there are 7, then there will be 6 digits)
  3. Combining 1 and 2, the string must be at least 8 characters long

This would be the string version based on the above rules:

public static bool IsValid( string str )
{
    if( str.Length < 8 )
    {
        return false;
    }

    if( !str.StartsWith( "CA" ) && !str.StartsWith( "MA" ) )
    {
        return false;
    }

    int result;
    string end = str.Substring( str.Length - 6 );
    bool isValid = int.TryParse( end, out result );

    return isValid;
}
于 2013-11-10T16:32:58.670 回答