C# 优化和改进`username`regex

C# 优化和改进`username`regex,c#,regex,c#-4.0,C#,Regex,C# 4.0,我创建了这个Regex来验证我在项目中需要的用户名: ^(?=.{3,32}$)(?!.*[._-]{2})(?!.*[0-9]{5,})[a-z](?:[\w]*|[a-z0-9\.]*|[a-z0-9-]*)[a-z0-9]$ 它工作得很好;但我想知道是否有任何改进和优化,因为我不完全是一个正则表达式的家伙 可以使用正则表达式和测试 规则是: 用户名应以[a-z] 用户名应以[a-z0-9] 用户名的长度可以在3到32之间 用户名可以包含[a-z0-9\.\uz-] 数字之间的距离不得超

我创建了这个
Regex
来验证我在项目中需要的用户名:

^(?=.{3,32}$)(?!.*[._-]{2})(?!.*[0-9]{5,})[a-z](?:[\w]*|[a-z0-9\.]*|[a-z0-9-]*)[a-z0-9]$
它工作得很好;但我想知道是否有任何改进和优化,因为我不完全是一个正则表达式的家伙

可以使用正则表达式和测试

规则是:

  • 用户名应以
    [a-z]
  • 用户名应以
    [a-z0-9]
  • 用户名的长度可以在3到32之间
  • 用户名可以包含
    [a-z0-9\.\uz-]
  • 数字之间的距离不得超过4次。我的意思是,
    p1234
    是匹配项,
    p12345
    不是匹配项
  • 每个用户名只能包含
    [\.\u-]
    中的一个。我的意思是用户名可以包含
    -
  • 每个
    -
    后面都应该跟一个字母数字。我的意思是一个
    后面不能跟着另一个
    。它们不应该彼此靠近
测试:

j1vad-amiry            match
j1vad-ami-ry           match
ja23d_am8ry            match
ja_23d_am8ry           match
jav5d2.am3y            match
jav.ad.amiry           match
jav.ad.ami.ry.2        match
ja3fd4                 match
page2491               match
page24915              not match
jav-ad_amiry           not match
javad_am-iry           not match
jav.ami-ry             not match
jav.ami_ry             not match
jav.ami__ry            not match
2jav                   not match
2jav_ad                not match
2jav_ad3               not match

提前谢谢。

我会把它分成几张支票。这样,您就可以报告特定用户名的确切错误,而不仅仅是“它错了”。PS:
performance
标签在这里没有多大意义。看起来像是一个主题,但不是。@HABO我不知道
CodeReview
站点;谢谢你的提醒。我现在正在检查它。@zerkms我删除了
performance
tag您不必对所有这些都使用正则表达式,对吗?例如,用C#检查长度要容易得多。