Javascript 不超过两个重复字母/数字的正则表达式

Javascript 不超过两个重复字母/数字的正则表达式,javascript,regex,Javascript,Regex,我需要处理XSL文件中不超过两个相同字母/数字的正则表达式 没有空间 不支持特殊字符 支架(a-z,a-z,0-9) 需要a-z中的一个 需要0-9中的一个 不超过2个相同的字母/数字(即,BBB将失败,BB被接受) 到目前为止我所拥有的 (?:[^a-zA-Z0-9]{1,2}) 作为对澄清的回应,似乎并不严格要求使用单个正则表达式。在这种情况下,我建议您使用几个正则表达式或函数。我的猜测是,性能不是一个要求,因为通常这些检查都是根据用户输入进行的。用户输入验证可能需要100毫秒,但仍然

我需要处理XSL文件中不超过两个相同字母/数字的正则表达式

  • 没有空间
  • 不支持特殊字符
  • 支架(a-z,a-z,0-9)
  • 需要a-z中的一个
  • 需要0-9中的一个
  • 不超过2个相同的字母/数字(即,
    BBB
    将失败,
    BB
    被接受)
到目前为止我所拥有的

(?:[^a-zA-Z0-9]{1,2})

作为对澄清的回应,似乎并不严格要求使用单个正则表达式。在这种情况下,我建议您使用几个正则表达式或函数。我的猜测是,性能不是一个要求,因为通常这些检查都是根据用户输入进行的。用户输入验证可能需要100毫秒,但仍然是即时的,您可以在100毫秒内运行大量代码

例如,我个人会在单独的测试中检查您的每个条件。首先,检查空格。第二,检查至少一封信。接下来,检查至少一个数字。最后,查找三个或更多重复字符的跨度

您的代码将更容易理解,以后修改规则也将更容易(经验表明,这几乎肯定会发生)

例如:

function do_validation(string) {
    return (has_no_space(string) &&
            has_no_special_char(string) &&
            has_alpha(string) &&
            has_digit(string) &&
            ! (has_repeating(string)))

我个人认为,这是一个数量级比一个复杂的正则表达式更容易阅读。另外,添加或删除规则并不需要重新实现复杂的正则表达式(因此,需要重新测试所有可能的组合)

要匹配连续重复3次或更多次的相同字符,请尝试:

([a-zA-Z0-9])\1{2,}
样本匹配(和均测试):
AABBAA
(无匹配)、
aabbaaa
(匹配
BBB
AAA
),
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
^(?。*([A-Za-z0-9])\1{2})(?=.[A-z])(?=..*\d)[A-Za-z0-9]+$

以下是分类:

(?!*([A-Za-z0-9])\1{2}
确保所有字符在一行中重复的次数均不超过两次

(?=.[a-z])
至少需要一个小写字母

(?=.*\d)
至少需要一位数字

[A-Za-z0-9]+
只允许字母和数字

编辑:
从负前瞻中删除了一个无关的
*

您可以在两个正则表达式中执行此操作:

  • /^(?=.[a-z])(?=.[0-9])[a-z0-9]+$/i
    这将确保至少有1个数字和1个字母,同时只接受字母和数字(无空格或特殊字符)
  • /([a-z0-9])\1{2,}/i
    如果此字符匹配,则存在重复字符。这意味着您应该抛出
    false
  • 说明: 第一个正则表达式:

    • ^
      :匹配行的开头
    • (?=.[a-z])
      :检查是否至少有一个字母
    • (?=.[0-9])
      :检查是否至少有一个数字
    • [a-z0-9]+
      :如果检查为真,则只匹配数字/字母一次或多次
    • $
      :匹配行尾
    • i
      :修饰符,匹配不区分大小写
    第二个正则表达式:

    • ([a-z0-9])
      :匹配数字或字母并将其分组
    • \1{2,}
      :匹配组1两次或多次
    • i
      :修饰符,匹配不区分大小写

    这个对你有用吗

    /(\b(?:([A-Za-z0-9])(?!\2{2}))+\b)/
    
    试一试:

    var regex = new RegExp(/(\b(?:([A-Za-z0-9])(?!\2{2}))+\b)/)
    var tests = ['A1D3E', 'AAAA', 'AABAA', 'abccddeeff', 'abbbc', '1234']
    
    for(test in tests) {
       console.log(tests[test] + ' - ' + Boolean(tests[test].match(regex)))
    }
    
    将输出:

    A1D3E - true
    AAAA - false
    AABAA - true
    abccddeeff - true
    abbbc - false
    1234 - true
    


    它必须是一个正则表达式,或者返回true或false的函数可以吗?@Bryan Oakley:我有一个函数要检查变量是否与正则表达式匹配。哪个返回true或false@HamZa:AABAA可接受,只要不连续3个字母,至少需要一个小写字母和一个数字?字符串是否也应该以一个(小写)字母开头?这不重要吗?@rednaw:不重要,只要正则表达式满足所有要求,我就要发布这个!打败我!这不需要至少一个数字和一个字符。这个解决方案不需要至少一个数字和一个字符,也不局限于字母数字,这与他试图匹配的相反。请看我的答案,它满足所有要求。我更改了答案,以便清楚地表明它满足了其中一个要求。我相信3是意外地从9切换而来的<代码>([a-zA-Z0-3])\1{2,}
    应该是
    ([a-zA-Z0-9])\1{2,}
    我正在测试正则表达式,它与
    A1D3E
    (有效)或
    AAAA
    (无效)之类的字符串不匹配。@Rasco:需要小写字母,所以
    A1D3E
    无效。@Brian Stephens,这和现在一样有效,我已经测试了几个案例,需要进一步测试吗too@cool_spirit布莱恩说需要小写字母吗?因为之前你说过,
    AABAA
    会valid@rednaw,你说得对,他说,
    AABAA
    是有效的,但这与另一个要求也需要数字相矛盾。我想他指的是
    AABAA
    示例,只是为了澄清重复要求。令人困惑再次感谢,但我现在是如何使用不同的方法来处理的,我不想以某种方式构建我的文件,xsl文件不太喜欢/,我不知道why@cool_spirit然后使用
    (?i)^(?=.[a-z])(?=.[0-9])[a-z0-9]+$
    (?i)([a-z0-9])\1{2,}
    。我假设这是纯JS…向上投票,。。。虽然它不符合OP的要求,但它确实符合我的要求,谢谢。