代码之家  ›  专栏  ›  技术社区  ›  Marlon

C带有一些限制的用户名的regex

  •  5
  • Marlon  · 技术社区  · 14 年前

    类似 this topic .

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

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

    编辑:

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

    有一阵子都被难住了。我刚接触雷杰克斯。

    2 回复  |  直到 10 年前
        1
  •  12
  •   Mark Byers    14 年前

    在单个正则表达式中表达一组不相关的规则并不是很干净,但是可以通过使用lookaround断言来实现。 (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代码编写。

        2
  •  14
  •   Ben Voigt    14 年前

    作为对马克答案的优化:

    ^(?=.{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})[._()\[\]-]?)*$