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

时间:2010-08-27 22:48:30

标签: c# regex

this topic类似。

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

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

编辑:

  • 字母和数字是a-z A-Z 0-9

被困了一会儿。我是regex的新手。

2 个答案:

答案 0 :(得分:14)

作为Mark答案的优化:

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

说明:

(?=.{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

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

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

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

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

答案 1 :(得分:12)

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

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

说明:

(?=[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#代码中。