【发布时间】:2015-05-04 07:50:23
【问题描述】:
我正在尝试构建一些正则表达式来检测某人何时尝试用点“填写”他们的用户名。
还有一些其他要求:
- 用户名只能包含字母、数字和点
- 用户名必须以字母或数字开头和结尾
- 但不超过一个连续的点
- 至少 6 个字符(字母和数字)
例如:
- 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 对其进行预格式化。
【问题讨论】:
-
.length属性是否足够?它应该让你的表达不那么复杂。 -
尝试在
\.\.上匹配有什么问题吗? -
如何使用 matching 正则表达式并检查不匹配:jsfiddle.net/ew88c8wt/2 ? regex101.com 上的正则表达式:regex101.com/r/qS7mY5/1
-
我不确定你的反向要求是否合适,看看结果:regex101.com/r/qS7mY5/2
-
@npinti,谢谢,但我正在尝试尽可能多地使用正则表达式。
标签: regex