我想编写一个正则表达式,它将过滤任何用户名,其中:
以数字或字母开头(不区分大小写)
可以包含-
但不能连续包含多个
例如 u-s-e-r
✔ us-er
✔ us--er
✖
此外,用户名不能以开头-
或结尾-
例如 -user
✖ user-
✖
还需要至少1个字符(字母或数字),最大39个字符。
我最接近结果的是这样的:
^[a-zA-Z\d](?:[a-zA-Z\d]|-(?=[a-zA-Z\d])){0,38}
这完全匹配它应该匹配的内容,但是它也匹配了一些不应该匹配的东西。
基本上,这些不应该是有效的:
-username
_username_
__us_ername
us_er
username-
1user--name
132uname-
-uname1234
-username-
user--name
av34axc-
1234567890A1234567890B1234567890C1234567890D
这些应该是有效的:
Username
a-a
aBc
BaC
1-1
1-2-3-4
q-1-2-3
q-q-q-q-q
username
123username123
username3123
1234
user-name
13-13
q1-q2-q3
a
A
1234567890A1234567890B1234567890C123456
1234567890A123456-7890B1234567890C12345
GCT1015
富国沪深
相关分类