Javascript 正在寻找验证用户名的方法

Javascript 正在寻找验证用户名的方法,javascript,regex,Javascript,Regex,我试图在使用标记函数时根据以下条件验证用户名: 仅包含字母数字字符、下划线和点 Dot不能位于用户名(例如用户名/用户名)的结尾或开头 点和下划线不能相邻(例如用户名) 点不能在一行中多次使用(例如user..name) 当存在允许字符以外的字符(例如@user@next或@user/nnnn将仅验证用户是否为有效用户名) 另一个用户名只能在空格后写入。(例如,@user@next将在@user@next将仅验证用户身份) 到目前为止,我已经尝试过: ^(?=.{8,20}$)(?![.])(?

我试图在使用标记函数时根据以下条件验证用户名:

  • 仅包含字母数字字符、下划线和点
  • Dot不能位于用户名(例如用户名/用户名)的结尾或开头
  • 点和下划线不能相邻(例如用户名)
  • 点不能在一行中多次使用(例如user..name)
  • 当存在允许字符以外的字符(例如@user@next或@user/nnnn将仅验证用户是否为有效用户名)
  • 另一个用户名只能在空格后写入。(例如,@user@next将在@user@next将仅验证用户身份)
  • 到目前为止,我已经尝试过: ^(?=.{8,20}$)(?![.])(?!.[.]{2})[a-zA-Z0-9.]+(?)$,并处理了for循环的多个用户名问题


    我想知道实现这样的东西(例如正则表达式、for循环、组合)的最佳方式是什么。我尝试使用正则表达式,但意识到它非常具体,可能会变得复杂。

    使用以下正则表达式:

    (?!\.)(?![a-zA-Z._]*(?:\._|_\.|\.\.))[a-zA-Z._]*[a-zA-Z_]
    
  • (?!\)
    :用于确保名称不能以“.”开头的负先行断言
  • (?![a-zA-Z..\.*(?:\.\u124;.\ u124;.\ u124;.\ u124;.\ u124;.\)
    :名称不连续包含
    的负面前瞻性断言
  • [a-zA-Z.]*[a-zA-Z_]
    :确保名称至少有一个字符长,且不以
    结尾
  • 但是,结果不一定是您预期的结果,因为当您找到不是有效名称的第一个字符时,您希望停止扫描名称,但您继续扫描以查找更多有效名称。因此,例如,当输入为
    .user
    时,当您看到
    时停止扫描,因为您知道名称不能以
    开头。但是,您随后继续扫描,并且仍然将
    用户
    作为有效名称进行扫描

    let text='user user\u xyx\u abc user\u def user.abc user.\u abc user..abc user\u abc。用户';
    设regexp=/(?!\)(?![a-zA-Z.\*(?:\.\u124;|u\.\ u124;\.\)[a-zA-Z.\]*[a-zA-Z.\]/g;
    让matches=text.matchAll(regexp);
    for(让一对一配对){
    控制台日志(匹配);
    
    }你试过什么吗?我在这里试过:^(?=.{8,20}$)(?![。])(?!.[.]{2})[a-zA-Z0-9.+(?用户名是什么意思,如果它不止一个,请申请数组上的循环并使用regex.test()函数…你可以找到有关test()的更多信息。你能举个例子吗?