用户名的正则表达式

neo*_*bie 5 regex

我需要有关正则表达式的帮助,条件如下(4):

  1. 从az开始
  2. 以a-z0-9结尾
  3. 允许3个特殊字符,如._-
  4. (3)中的字符必须后跟字母数字字符,并且(3)中的任何字符都不能跟随它.

不知道该怎么做.任何帮助表示赞赏,样品和一些解释.

pol*_*nts 9

你可以试试这个:

^(?=.{5,10}$)(?!.*[._-]{2})[a-z][a-z0-9._-]*[a-z0-9]$
Run Code Online (Sandbox Code Playgroud)

这使用前瞻来强制用户名必须包含5到10个字符(?=.{5,10}$),并且3个特殊字符中没有一个连续出现两次(?!.*[._-]{2}),但总体而言它们可以出现任意次数(Konrad以不同的方式解释它,因为3个特殊字符最多可出现3次).

这是Java中的测试工具:

    String[] test = {
        "abc",
        "abcde",
        "acd_e",
        "_abcd",
        "abcd_",
        "a__bc",
        "a_.bc",
        "a_b.c-d",
        "a_b_c_d_e",
        "this-is-too-long",
    };
    for (String s : test) {
        System.out.format("%s %B %n", s,
            s.matches("^(?=.{5,10}$)(?!.*[._-]{2})[a-z][a-z0-9._-]*[a-z0-9]$")
        );
    }
Run Code Online (Sandbox Code Playgroud)

这打印:

abc FALSE 
abcde TRUE 
acd_e TRUE 
_abcd FALSE 
abcd_ FALSE 
a__bc FALSE 
a_.bc FALSE 
a_b.c-d TRUE 
a_b_c_d_e TRUE 
this-is-too-long FALSE 
Run Code Online (Sandbox Code Playgroud)

也可以看看


Kon*_*lph 7

所以基本上:

  1. 从开始[a-z].
  2. 允许第一次[a-z0-9],几次.1)
  3. 允许
    • 最多一个[._-],其次是
    • 至少有一个 [a-z0-9]
    • 三次或更少.
  4. 结束[a-z0-9](隐含在上面).

产量:

^[a-z][a-z0-9]*([._-][a-z0-9]+){0,3}$
Run Code Online (Sandbox Code Playgroud)

但请注意,这可能会导致用户名只有一个字符.


1)(由@codeka发布)


Nic*_*not 5

尝试:

^[a-zA-Z](([\._\-][a-zA-Z0-9])|[a-zA-Z0-9])*[a-z0-9]$
Run Code Online (Sandbox Code Playgroud)

1)^ [a-zA-Z]:开始

2)(([[._-] [a-zA-Z0-9])| [a-zA-Z0-9])*:任意数量的字母数字或特殊字符,后跟字母数字

3)[a-z0-9] $