用户名略有复杂的正则表达式

Tho*_*eil 4 regex

我需要帮助来为用户名构建正则表达式.

用户名分为三个部分.第一个字符,中间组,最后一个字符.

以下是我必须遵循的规则:

  • 第一个字符必须是小写字母,例如 (a-z)
  • 中间的字符组必须是4个或更多字符的字母和数字,例如 (a-zA-Z0-9)
  • 中间组必须至少包含一个字母和一个数字
  • 最后一个字符必须是数字 (0-9)

一些例子:

hTes38      (i.e. h Tes3 8)
j347k6      (i.e. j 347k 6)
atksde21D2  (i.e. a tksde21D 2)
Run Code Online (Sandbox Code Playgroud)

以下是我到目前为止的情况,几乎就是:

^[a-z][a-zA-Z0-9]\w{1,}[0-9]$
Run Code Online (Sandbox Code Playgroud)

但中间组不正确,我不知道如何强制执行'必须包含一个字母和一个数字'规则.

Boh*_*ian 5

使用两个前瞻(一个用于字母,一个用于数字)来断言中间部分至少有一个字母和一个数字:

^[a-z](?=.*[a-zA-Z])(?=.*\d.*.$)[a-zA-Z\d]{4,}\d$
Run Code Online (Sandbox Code Playgroud)

请注意,数字的前瞻(?=.*\d.*.$)结束.*.$,这确保整个输入的最后一位数不会被计为中间部分的数字(最后一个点消耗最后一个数字,因此它不可用于\d匹配).

查看带有样品和边缘情况的现场演示.

有关环顾四周的详细说明,请参阅此外部文章.