正则表达式:检查字符数量

4

我需要编写一个.NET正则表达式,用于验证字符串是否为字母数字且具有4个或8个字符(不能多也不能少)。我该如何做?我尝试使用([a-zA-Z0-9]{4})|([a-zA-Z0-9]{8}),但它不起作用。


1
请问您能否提供一个导致失败的字符串示例? - ysap
2个回答

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      : 真
0123      : 真
01234567  : 真
012345    : 假
0123456789: 假

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

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

只是好奇,这是哪种语言? - ysap

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 个字符周围都不需要括号(但你需要在选择项周围加上它),因为选择符(竖线)具有最低的优先级。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接