我想编写一个正则表达式,以过滤以下用户名:
可以包含-
,但不能连续包含多个
示例 u-s-e-r
✔us-er
✔us--er
✖
用户名也不能以-
开头或以-
结束
示例 -user
✖user-
✖
我最接近结果的是这样的
^[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
答案 0 :(得分:3)
您可以使用
^(?=.{1,39}$)[a-zA-Z\d]+(?:-[a-zA-Z\d]+)*$
详细信息
^
-字符串的开头(?=.{1,39}$)
-长度必须为1到39个字符[a-zA-Z\d]+
-1个以上字母数字字符(?:-[a-zA-Z\d]+)*
-重复0次或更多次
-
-连字符[a-zA-Z\d]+
-1个以上字母数字字符$
-字符串的结尾。答案 1 :(得分:0)
您可以使用否定前瞻来实现连字符限制: