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

时间:2010-08-10 22:27:46

标签: .net regex

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

2 个答案:

答案 0 :(得分:5)

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

^([a-zA-Z0-9]{4}|[a-zA-Z0-9]{8})$

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

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));
}

结果:

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

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

^(?:[a-zA-Z0-9]{4}){1,2}$

答案 1 :(得分:1)

您应该尝试单词边界或行功能的开头/结尾。例如,您希望创建一个字符串,该字符串是4或8个字符的字母数字,并且没有多余空格:

\b([a-zA-Z0-9]{4}|[a-zA-Z0-9]{8})\b   or the string is the entire line
^([a-zA-Z0-9]{4}|[a-zA-Z0-9]{8})$

您可以使用\ w作为单词字符

来缩短这一点
\b(\w{4}|\w{8})\b
^(\w{4}|\w{8})$

由于您使用的是.NET,因此在构建正则表达式模式时(如果它用引号括起来),请不要忘记转义反斜杠。

此外,您不需要围绕每个4或8个字符使用括号(但您需要围绕更改),因为更改管道(垂直条)具有最低优先级。