我需要编写一个.NET正则表达式,用于验证字符串是否为字母数字且具有4个或8个字符(不能多也不能少)。我该如何做?我尝试使用([a-zA-Z0-9]{4})|([a-zA-Z0-9]{8}),但它不起作用。
您需要包含起始和结束行锚点,否则它可能匹配字符串的一部分:
^([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}$
你应该尝试使用单词边界或行首/行尾特性。例如,你想要创建一个由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 个字符周围都不需要括号(但你需要在选择项周围加上它),因为选择符(竖线)具有最低的优先级。