C#Regex是一个有一些限制的用户名

Mar*_*lon 5 c# regex

此主题类似.

我正在尝试使用以下限制验证用户名:

  • 必须以字母或数字开头
  • 长度必须为3到15个字符
  • 符号包括:. - _()[]
  • 符号不能相邻,但字母和数字可以

编辑:

  • 字母和数字是az AZ 0-9

被困了一会儿.我是正则表达式的新手.

Ben*_*igt 14

作为Mark答案的优化:

^(?=.{3,15}$)([A-Za-z0-9][._()\[\]-]?)*$
Run Code Online (Sandbox Code Playgroud)

说明:

(?=.{3,15}$)                   Must be 3-15 characters in the string
([A-Za-z0-9][._()\[\]-]?)*   The string is a sequence of alphanumerics,
                               each of which may be followed by a symbol
Run Code Online (Sandbox Code Playgroud)

这个允许使用Unicode字母数字:

^(?=.{3,15}$)((\p{L}|\p{N})[._()\[\]-]?)*$
Run Code Online (Sandbox Code Playgroud)

这个是Unicode变体,另外还使用非捕获组:

^(?=.{3,15}$)(?:(?:\p{L}|\p{N})[._()\[\]-]?)*$
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 12

在单个正则表达式中表达一组不相关的规则并不是那么干净,但可以通过使用外观断言(Rubular)来完成:

@"^(?=[A-Za-z0-9])(?!.*[._()\[\]-]{2})[A-Za-z0-9._()\[\]-]{3,15}$"
Run Code Online (Sandbox Code Playgroud)

说明:

(?=[A-Za-z0-9])            Must start with a letter or number
(?!.*[._()\[\]-]{2})       Cannot contain two consecutive symbols
[A-Za-z0-9._()\[\]-]{3,15} Must consist of between 3 to 15 allowed characters

您可能想要考虑这是否更容易阅读,并且作为更简单的正则表达式列表更易于维护,所有这些都必须成功验证,或者将其写入普通的C#代码中.

  • @Ben:不清楚,是的,但Mark的代码使用零宽度断言(它不消耗任何字符),因此保留了长度约束. (2认同)