javascript - 编写将过滤输入的用户名的正则表达式

标签 javascript regex

我想写一个正则表达式来过滤任何用户名:

  • 以数字或字母开头(不区分大小写)
  • 可以包含-但不能连续包含多个

    示例 u-s-e-rus-erus--er

  • 用户名不能以-开头或以-结尾

    示例 -useruser-

  • 还需要至少 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

最佳答案

你可以使用

^(?=.{1,39}$)[a-zA-Z\d]+(?:-[a-zA-Z\d]+)*$

参见 regex demoRegulex graph :

enter image description here

详情

  • ^ - 字符串的开始
  • (?=.{1,39}$) - 长度必须是 1 到 39 个字符
  • [a-zA-Z\d]+ - 1+ 个字母数字字符
  • (?:-[a-zA-Z\d]+)* - 0 次或多次重复
    • - - 连字符
    • [a-zA-Z\d]+ - 1+ 个字母数字字符
  • $ - 字符串结尾。

关于javascript - 编写将过滤输入的用户名的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55578852/

相关文章:

javascript - 遍历每个 html 标签

包含括号的 JavaScript 正则表达式模式

python - 标记文本,但将复合连字符的单词放在一起

Java正则表达式从字符串中删除重复的子字符串

正则表达式用于以括号内等号结尾的字符串?

javascript - DOM 解析器在 img 标签上给出错误

javascript - iOS 不更新 JavaScript 文件

javascript - 如何使用 jquery 连接 "this"和附加字符串选择器?

javascript - 如何在两个多边形的交点处显示图像?

Python从字符串中删除特定的零