Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要帮助为用户名编写正则表达式吗_Javascript_Regex - Fatal编程技术网

Javascript 需要帮助为用户名编写正则表达式吗

Javascript 需要帮助为用户名编写正则表达式吗,javascript,regex,Javascript,Regex,嘿,所以我在寻找一种regrex图案: 一行中只允许两个或一个\u,但不允许更多,可以结束-开始并将\u置于两者之间 最多20个,最少3个字符 一行中只允许一个句点,不能在句点中开始或结束 接受A-Z和1-9 通过和失败的一些示例包括: .test #fail _test #pass _.test #pass __test #pass test_ #pass te_.st #pass te.st #pass ..test #fail 到目前为止,我已经有了^[\w](?!.*.{2})(?

嘿,所以我在寻找一种regrex图案:

  • 一行中只允许两个或一个
    \u
    ,但不允许更多,可以结束-开始并将
    \u
    置于两者之间
  • 最多20个,最少3个字符
  • 一行中只允许一个句点,不能在句点中开始或结束
  • 接受A-Z和1-9
通过和失败的一些示例包括:

.test #fail
_test #pass
_.test #pass
__test #pass
test_ #pass
te_.st #pass
te.st #pass
..test #fail
到目前为止,我已经有了
^[\w](?!.*.{2})(?!.*.{2})[\w.]{1,28}$
,它适用于所有情况,但不能检测单词之间和末尾的
\
。任何帮助都将不胜感激!这伤了我的大脑好几个小时了

一行中只允许一个句点,不能在句点中开始或结束

字符串开头的
^\.
\.$
\.\.
的负前瞻

一行中只能有两个或一个,但不能有更多,可以结束-开始,也可以在两者之间

从字符串开头开始对
\uu
进行负前瞻

最多20个,最少3个字符

^(?!.*___|\.|.*\.$|.*\.\.)[a-z1-9_.]{3,20}$
在实现其他逻辑后,匹配并使用3-20个允许的字符

^(?!.*___|\.|.*\.$|.*\.\.)[a-z1-9_.]{3,20}$

  • ^
    -从字符串开始:
  • (?!。。$。$。。。。。。。。)
    -确保匹配不会:
    • *\uuuuuuu
      -包含三个下划线
    • \.
      -从
      开始
    • *\.$
      -以
      结尾
    • *\。\.
      -包含双句点
  • [a-z1-9.]{3,20}
    -使用所有允许的字符匹配字符串正文中的3-20个字符(不区分大小写)

有时,只使用2-3个正则表达式,而不是试图将所有正则表达式合并为一个正则表达式,会使事情变得更加简单。
\w
包含
0
允许为零吗?也只允许使用大写字母吗?我如何将其转换为2-3个正则表达式?同样抱歉,它的0-9和大写字母是允许的。例如,如果您现有的正则表达式所缺少的只是检测
\uuu
,只需添加第二个正则表达式,然后执行
str.match(regex1)和!str.match(regex2)
或similarIMO这样做也更具可读性,尽管没有那么有趣:哦,谢谢你这么好的解释和快速的响应,非常感谢@BananaGuy18你应该读:对不起:p全新的溢出我想你也可以省略第一个前瞻,用量词重复字符类,而不是
^(?。*.*.$.$..*.$..*.-.-.\.[a-z1-9.]{3,20}$
。@第四只鸟你完全正确,我最初用重复字符集来表示
,但后来意识到这太重复了,忘记了将长度检查重构到消费令牌中。