javascript - 最多包含 2 个连续相等字符和其他选项的正则表达式

标签 javascript regex

我对正则表达式完全陌生,我必须构建一个具有以下先决条件的表达式:

  • 8 到 15 个字符

  • 至少 1 个字母字符 (a-z,A-Z)

  • 至少 1 个非字母(所有其他)

  • 至少 1 个大写字母

  • 至少 1 个非大写字母

  • 最多 2 个连续的相等字符(例如:接受“g”,接受“gg”,不接受“ggg”)

我试过这个,但它只适用于最多 5 个连续的相等字符(不明白为什么)。我做错了什么?

var regexp = /^((?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z])(.{8,15})(?!.*(.)\1{2}))$/;

编辑它适用于

asdfghjkl1Q
asdfghjkl1QQQ
asdfghjkl1QQQQQ

它不适用于

asdfghjkl1QQQQQQ
asdfghjkl1QQQQQq

我想要获得的是: 工作:

asdfghjkl1Q
asdfghjkl1QQ
asdfghjkl11

不适用于:

asdfghjkl1QQQ
asdfghjkl1QQq
asdfghjkl111

最佳答案

我认为您不需要外部捕获组,因此您可以省略它。

您可以先检查 8,15 个字符,直到字符串 $ 结束。使用前瞻 (?=.{8,15}$)

如果所有前瞻匹配,则匹配任何字符一次或多次.+

像这样尝试:

^(?=.{8,15}$)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z])(?!.*(.)\1{2}).+$

关于javascript - 最多包含 2 个连续相等字符和其他选项的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49433333/

相关文章:

javascript - 如何让 React Native 像媒体播放器一样运行(可能是 "foreground")?

javascript - 单击时滚动到固定 div 中的位置

java - 使用正则表达式 java 进行文本分割

java - 从 MySQL 表中检索正则表达式模式

javascript 逻辑错误,我的 html .text() 在提交时未替换旧文本

javascript - 如何在绘图中设置小刻度

javascript - Html 表格行对齐

ruby - 修改正则表达式以验证密码至少有一个大写字母。 ruby

python - python中多次出现的正则表达式

javascript - 奇怪的正则表达式总是返回 true