正则表达式用句点检测填充字符长度

时间:2015-05-04 07:50:23

标签: regex

我正在尝试构建一些正则表达式,可以检测到有人试图用点“填写”他们的用户名。

还有一些其他要求:

  • 用户名必须只包含字母,数字和点
  • 用户名必须以字母或数字开头和结尾
  • 但不超过一个连续点
  • 最少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

这抓住了:

  • 任何不是字母,数字,点的字符
  • 无法以点开头
  • 不能以点结尾
  • 不能有2个或更多连续的点
  • 不能包含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预先格式化它。

1 个答案:

答案 0 :(得分:0)

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

/^(\w\.?){4}\w$/

相同的表达式扩展:

/^\w\.?\w\.?\w\.?\w\.?\w$/

这将捕获任何仅填充5个或更少字符并散布点的内容。

我正在使用的完整正则表达式也抓住了:

  • 31个或更多字符的字符串(字母数字和句点)。
  • 任何非字母数字和句号的字符。
  • 任何以句号
  • 开头的字符串
  • 任何以句号
  • 结尾的字符串
  • 具有2个或更多连续句点的任何字符串
  • 列表中的新来者:任何包含8个或更多数字而没有任何alpha的字符串。

    /^(\w\.?){4}\w$|^\w{0,5}$|\w{31,}|[^a-z0-9.]|^\.|\.$|\.{2,}|\d{8,}/i
    

我已经使用regex101上可以想到的所有可能组合对此进行了测试:https://regex101.com/r/xI7wZ3/1 它的工作原理! (耶)