编辑:我已将代码中的正则表达式更新为看起来可以工作的正则表达式。
@"^[a-z](?=[a-z0-9@#\$]*[0-9][a-z0-9@#\$]*)[a-z0-9@#\$]{0,6}[a-z@#\$]$"
编辑:我已经调整了代码。其中一项测试是 aa1@aaaa 标记为预期会失败,正如 Douglas 所指出的那样应该成功。
我已经验证了 Douglas 提供的正则表达式同样有效,而且它也更短。
不是这样的答案,但这里有一个快速测试装置。我使用了@ShaunWilde 回答中的正则表达式和测试。
不幸的是,测试没有返回预期的结果:-|。
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace StackOverflow.RegularExpressions
{
internal class Program
{
private static void Main(string[] args)
{
var validString =
new Regex(@"^[a-z][a-z\d!@#$%\^&*()\-+]{0,7}$(?<=\d\D+)",
RegexOptions.Compiled);
var testsAndExpectedResults = new List<Tuple<string, bool>>
{
new Tuple<string, bool>("a1@aaaaa", true),
new Tuple<string, bool>("a@1aaaaa", true),
new Tuple<string, bool>("aa@aaaaa", false),
new Tuple<string, bool>("a1@aaaaaaa", false),
new Tuple<string, bool>("a1@aaaa", true),
new Tuple<string, bool>("1a1@aaaa", false),
new Tuple<string, bool>("aa1@aaaa", true),
new Tuple<string, bool>("Aa1@aaaa", false),
new Tuple<string, bool>("Aa1@aaaA", false),
new Tuple<string, bool>("aA1@aaaA", false),
new Tuple<string, bool>("#A@a1aaaaa", false)
};
testsAndExpectedResults.ForEach(t =>
Console.WriteLine("With '{0}' expected {1}, got {2}", t.Item1, t.Item2,
validString.IsMatch(t.Item1))
);
Console.ReadKey();
}
}
}