猿问

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

我想编写一个正则表达式,它将过滤任何用户名,其中:

  • 以数字或字母开头(不区分大小写)

  • 可以包含-但不能连续包含多个

    例如 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


慕码人8056858
浏览 295回答 2
2回答

GCT1015

您可以使用^(?=.{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个以上字母数字字符$ -字符串结尾。

富国沪深

您可以使用否定的前瞻性来实现连字符限制:^(?!.*-(-|$)|-)[a-z\d-]{1,39}$
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答