我有一个用户名验证器IsValidUsername
,我正在测试“baconman”,但它失败了,有人可以帮我解决这个正则表达式吗?
if(!Regex.IsMatch(str, @"^[a-zA-Z]\\w+|[0-9][0-9_]*[a-zA-Z]+\\w*$")) {
isValid = false;
}
我希望限制为:(非常接近)
答案 0 :(得分:2)
你正在不必要地逃避:如果你把你的正则表达式写成字符串之外的@,那么你不需要两个\ - 只有一个没问题。
或者:
@"\w"
或
"\\w"
编辑:我没有说清楚:现在由于双重逃避,你正在寻找你的正则表达式和一个w。所以你的比赛需要[某些角色] \ w来匹配(例如:“a \ w”或“a \ wwwwww”匹配。
答案 1 :(得分:1)
您的要求最好在正常的C#中处理。它们不能很好地映射到正则表达式。只需使用LINQ对其进行编码,LINQ可以像在IEnumerable<char>
上一样处理字符串。
另外,理解字符串的查询比理解具有您的要求的正则表达式要容易得多。
答案 2 :(得分:0)
可以将所有内容都作为正则表达式的一部分进行,但它并不漂亮: - )
^(\w(?=\w*[a-zA-Z])|[a-zA-Z]|\w(?<=[a-zA-Z]\w*)){5,17}$
它执行3次检查,总是导致1个字符匹配(所以我们可以在最后执行长度检查)