【发布时间】:2016-02-27 06:13:44
【问题描述】:
我正在尝试创建一个正则表达式。规则是:
1) 仅限字母(大写和小写)、数字、句点 (.) 和下划线 (_)
2) 必须以字母或数字开头和结尾(即没有句点/下划线)
3) 一行中不能有多个标点符号,任何类型(没有 .. 或 ._ 或 _. 或 __ 或 .._. 等)
4) 必须包含至少 2 个字母(大写字母或小写字母或两者皆有,无所谓)
5) 不少于 3 个字符,不超过 25 个字符
到目前为止,我所拥有的是:
^((?!.*[\._]{2})[A-Za-z0-9\._]{3,25})$
这是接近的。我有规则 1、3 和 5,但无法弄清楚 2 和 4。
我以为
(([A-Za-z0-9]?)([A-Za-z0-9\._]+)([A-Za-z0-9]?)){3,25}
会得到规则 2,但它只是打破了它。
我已经为此工作了几个小时,但我找不到或想出的解决方案都不是我想要的。
非常感谢您提供对 Regex 语句的解释,但并非完全必要。
编辑 1
根据菜鸟的建议:
^((?!.*[\._]{2})(([\w\d\.]+)){3,25})$
编辑 2
有效:
1rockit.man
q3w
e4.45r.d.2
sp_am
(以及 3 到 25 个字符之间的任何其他字符,没有前导或重复的标点符号)
无效:
.ret.
123
12a
ret..wer
super_.duper
_petrat
petrat_
【问题讨论】:
-
使用
shorthand运算符,如\w和\d。更容易理解。\w还包括_以便覆盖。 -
您可能希望包含一些 valid 和 invalid 匹配项以进行快速测试。
-
1rockit.man和e4.45r.d.2根据条件 2 无效。不能以非字母/数字开头或结尾。您可能想再次检查给定的条件或示例。 -
@noob 不能以非字母或非数字开头。即,必须以字母或数字开头和结尾。我会在帖子中说得更清楚
-
好的。
non-letter/number似乎令人困惑。
标签: javascript regex