我想编写一个正则表达式,它将过滤任何用户名,其中:以数字或字母开头(不区分大小写)可以包含-但不能连续包含多个例如 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_ernameus_erusername-1user--name132uname--uname1234-username-user--nameav34axc-1234567890A1234567890B1234567890C1234567890D这些应该是有效的:Usernamea-aaBcBaC1-11-2-3-4q-1-2-3q-q-q-q-qusername123username123username31231234user-name13-13q1-q2-q3aA1234567890A1234567890B1234567890C1234561234567890A123456-7890B1234567890C12345
2 回答
GCT1015
TA贡献1827条经验 获得超4个赞
您可以使用
^(?=.{1,39}$)[a-zA-Z\d]+(?:-[a-zA-Z\d]+)*$
参见regex演示和Regulex图:
细节
^
-字符串开始(?=.{1,39}$)
-长度必须为1到39个字符[a-zA-Z\d]+
-1个以上字母数字字符(?:-[a-zA-Z\d]+)*
-重复0次或以上-
-连字符[a-zA-Z\d]+
-1个以上字母数字字符$
-字符串结尾。
添加回答
举报
0/150
提交
取消