正则表达式,用于检查字符数

Mar*_*tin 4 .net regex

我必须编写一个.NET正则表达式来验证一个字符串是否是字母数字并且有4或8个字符(不能少,仅此而已).我怎样才能做到这一点?我试过([a-zA-Z0-9] {4})|([a-zA-Z0-9] {8}),但它不起作用.

Mar*_*ers 5

您需要包含行锚的起点和终点,否则它可以匹配字符串的一部分:

^([a-zA-Z0-9]{4}|[a-zA-Z0-9]{8})$
Run Code Online (Sandbox Code Playgroud)

以下是如何使用此正则表达式的快速示例:

Regex regex = new Regex("^([a-zA-Z0-9]{4}|[a-zA-Z0-9]{8})$");
string[] tests = { "abcd", "0123", "01234567", "012345", "0123456789" };
foreach (string test in tests)
{
    Console.WriteLine("{0}: {1}", test.PadRight(10), regex.IsMatch(test));
}
Run Code Online (Sandbox Code Playgroud)

结果:

abcd      : True
0123      : True
01234567  : True
012345    : False
0123456789: False

编写正则表达式的另一种方法如下:

^(?:[a-zA-Z0-9]{4}){1,2}$
Run Code Online (Sandbox Code Playgroud)