我必须编写一个.NET正则表达式,它验证字符串是否是字母数字并且有4或8个字符(不能少,仅此而已)。我怎样才能做到这一点?我试过([a-zA-Z0-9] {4})|([a-zA-Z0-9] {8}),但它不起作用。
答案 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个字符使用括号(但您需要围绕更改),因为更改管道(垂直条)具有最低优先级。