Regex用于检测带句点的填充字符长度

Regex用于检测带句点的填充字符长度,regex,Regex,我正在尝试构建一些正则表达式,当有人试图用圆点“填充”他们的用户名时,它会检测到 还有一些其他要求: 用户名必须仅包含字母、数字和点 用户名必须以字母或数字开头和结尾 但不超过一个连续点 至少6个字符(字母和数字) e、 g: a、 b.c.d.e.6是允许的(未捕获),因为它有6个字符 a、 b.c.d.5没有(被捕获),因为它没有必备的6个字符 我构建正则表达式的方法是,如果存在匹配项,它将拒绝允许的用户名 到目前为止,我得到的是: /[^a-z0-9.]|^\.|\.$|\.{2,

我正在尝试构建一些正则表达式,当有人试图用圆点“填充”他们的用户名时,它会检测到

还有一些其他要求:

  • 用户名必须仅包含字母、数字和点
  • 用户名必须以字母或数字开头和结尾
  • 但不超过一个连续点
  • 至少6个字符(字母和数字)
e、 g:

  • a、 b.c.d.e.6是允许的(未捕获),因为它有6个字符
  • a、 b.c.d.5没有(被捕获),因为它没有必备的6个字符
我构建正则表达式的方法是,如果存在匹配项,它将拒绝允许的用户名

到目前为止,我得到的是:

/[^a-z0-9.]|^\.|\.$|\.{2,}|\S{31,}|^\S{0,5}$/i
这抓住了:

  • 任何不是字母、数字、点的字符
  • 不能从一个点开始
  • 不能以点结尾
  • 不能有两个或多个连续点
  • 不能有31个或更多字符
  • 不能有5个或更少的字符
我尝试了几十种不同的方法来完成最后的检查,但它们要么破坏了整个检查,包括允许的检查(a.b.c.d.e.6),要么就是不起作用

最接近我的是:

(\.{1}[a-z0-9]{1,}){1,3}\S{1,}$
问题是它还捕获123.456(应该允许/不捕获)

它应该捕获的字符串的其他示例:

  • asdf.g
  • a、 sdfg
  • a、 sdf.g
  • as.df.g

我试图只使用正则表达式来实现这一点,而不必使用JS预先格式化它。

好的,经过多次实验,我终于找到了答案。事实证明,查找不允许的字符串实际上更容易(无论如何对我来说):

同一表达式展开:

/^\w\.?\w\.?\w\.?\w\.?\w$/
这将捕获任何只填充了5个或更少字符且散布有点的内容

我使用的完整正则表达式还捕获:

  • 31个或更多字符的字符串(字母数字和句点)
  • 非字母数字和句点的任何字符
  • 任何以句点开头的字符串
  • 任何以句点结尾的字符串
  • 具有两个或多个连续句点的任何字符串
  • 列表中的新成员:任何包含8个或更多数字且不包含任何字母的字符串

    /^(\w\.?){4}\w$|^\w{0,5}$|\w{31,}|[^a-z0-9.]|^\.|\.$|\.{2,}|\d{8,}/i
    
我已经在regex101上测试了所有可能的组合:
而且它有效!(耶)

.length
属性是否足够?它应该使表达式不那么复杂。尝试在
\.\.
上匹配有什么问题吗?使用匹配的正则表达式并检查不匹配:?regex101.com上的正则表达式:我不确定您的反向要求是否合适,请查看结果:@npinti,谢谢,但我正在尽可能多地使用正则表达式。
/^(\w\.?){4}\w$|^\w{0,5}$|\w{31,}|[^a-z0-9.]|^\.|\.$|\.{2,}|\d{8,}/i