为了账号安全,请及时绑定邮箱和手机立即绑定

编写正则表达式以过滤输入的用户名

编写正则表达式以过滤输入的用户名

慕码人8056858 2021-04-07 17:18:41
我想编写一个正则表达式,它将过滤任何用户名,其中:以数字或字母开头(不区分大小写)可以包含-但不能连续包含多个例如 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图:

//img1.sycdn.imooc.com//60812e05000185a608580218.jpg

细节

  • ^ -字符串开始

  • (?=.{1,39}$) -长度必须为1到39个字符

  • [a-zA-Z\d]+ -1个以上字母数字字符

  • (?:-[a-zA-Z\d]+)* -重复0次或以上

    • - -连字符

    • [a-zA-Z\d]+ -1个以上字母数字字符

  • $ -字符串结尾。


查看完整回答
反对 回复 2021-04-22
?
富国沪深

TA贡献1790条经验 获得超9个赞

您可以使用否定的前瞻性来实现连字符限制:

^(?!.*-(-|$)|-)[a-z\d-]{1,39}$


查看完整回答
反对 回复 2021-04-22
  • 2 回答
  • 0 关注
  • 294 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信