【问题标题】:How to find 3 or more consecutive characters?如何找到3个或更多连续字符?
【发布时间】:2013-03-28 17:20:17
【问题描述】:

我正在检查密码。这些功能之一是查找输入的密码是否连续重复。我还没有代码,因为我不知道该怎么做。

我找到了这个RegEx match two or more same character non-consecutive,但它只匹配重复的逗号。

以下是场景:

5236aaa121 - 重复模式,因为 a 连续重复 3 次

2312aa32aa - 没有重复字符

111111asd - 重复模式,因为 1 连续重复多次

【问题讨论】:

  • 如果有人想多次重复密码中的某个字符,您应该允许他们。
  • 添加这些任意限制实际上是在降低系统的安全性。
  • 如果你警告用户,这将成为一种限制,因为用户会认为“哦,我已经被警告过;我不应该这样做”。
  • 如果你不想回答也没关系。我只是研究一下。
  • @Derek 你不是我的老板告诉我我要做什么。如果您不想回答,请忽略此问题。我只是在执行命令。

标签: javascript jquery


【解决方案1】:

使用反向引用:/(.)\1\1/

例子:

var hasTripple = /(.)\1\1/.test('xyzzzy');

JSFiddle Example

【讨论】:

  • 如何实现这个?不知道怎么用。
  • 例如,试试这个代码:var patt=/(.)\1\1/; alert(patt.test("1234567890o")); alert(patt.test("Moo")); alert(patt.test("Mooo"));
  • 你在哪个平台上?这是在 JavaScript 中,还是在服务器端的某个地方?
  • 甜蜜。听起来你不再需要它了,但这是我拼凑的一个快速 jsfiddle:jsfiddle.net/t87wB
  • 另外(我想将此评论与回答您的实际问题分开),如果这应该有助于密码安全,我肯定会回应上述一些关于推回的评论。也许你的老板也会在 SO 上问一个关于它的问题 :)
【解决方案2】:

下面的呢?

(.)\1{2,}

【讨论】:

  • 连续重复3次以上
  • (.) 表示“任何字符”,紧随其后的 \1{2,} 表示“同一字符至少出现两次”。这实际上让我觉得是最简洁的正则表达式。
【解决方案3】:

试试这个正则表达式: (.)\1\1+

/(.)\1\1+/g

点匹配任何字符,然后我们连续查找多个字符。我在http://regexpal.com/ 上对其进行了测试,我相信它可以满足您的需求

你可以这样使用:

str.match(/(.)\1\1+/g).length

只需检查它是否为 0

看看这个在行动......http://jsfiddle.net/yentc/2/

【讨论】:

  • 小心。当OP只希望“mooo”通过时,这个让“moo”通过。
  • blah blaah blaaah 只有 1 个匹配而不是 2 个。我需要 3 次或更多次连续重复字符
  • 另外,可能没有必要,但这也会为您提供匹配的数量,并将 aaaaaa 视为单个匹配,因为它是一组连续字符。
【解决方案4】:

您只需通过 for 循环迭代字符串并比较一个到下一个,如果两者相同然后增加一个(声明一个变量用于计数).. 最后检查计数值是否大于 0 则字符串重复模式...

【讨论】:

    【解决方案5】:

    你可以这样做:

    var password = '5236aaa121';
    
    for(var i = 0; i< password.length; i++) {
        var numberOfRepeats = CheckForRepeat(i, password, password.charAt(i));
        //do something
    
    }
    
    function CheckForRepeat(startIndex, originalString, charToCheck) {
        var repeatCount = 1;
        for(var i = startIndex+1; i< password.length; i++) {
            if(originalString.charAt(i) == charToCheck) {
                repeatCount++;
            } else {
            return repeatCount;
            }   
        }
        return repeatCount;
    }
    

    【讨论】:

    • 我遗漏了一个括号,循环错误。我对其进行了编辑和测试,现在可以使用了
    • 我只会给你+1,因为@jmar777首先得到它
    猜你喜欢
    • 2012-02-11
    • 2016-09-02
    • 2012-10-25
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    相关资源
    最近更新 更多