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

coo*_*rit 18 javascript regex

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

  • 没有空间
  • 不支持特殊字符
  • 支持(az,AZ,0-9)
  • 需要一个az
  • 需要0-9之一
  • 不超过2个相同的字母/数字(即,BBB将失败,BB被接受)

到目前为止我有什么

(?:[^a-zA-Z0-9]{1,2})
Run Code Online (Sandbox Code Playgroud)

Bri*_*ens 24

这个正则表达式会这样做: ^(?!.*([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]+ 只允许字母和数字

编辑:.*从负面前瞻中 删除了一个无关紧要的东西

  • @Rasco:需要小写字母,因此`A1D3E`无效. (2认同)

Rac*_*cso 15

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

([a-zA-Z0-9])\1{2,}
Run Code Online (Sandbox Code Playgroud)

示例匹配(在此处此处测试):( AABBAA无匹配),AABBBAAA(匹配BBBAAA),ABABABABABABABA(不匹配),ABCCCCCCCCCC(匹配CCCCCCCCCC).


git*_*rik 7

这个适合你吗?

/(\b(?:([A-Za-z0-9])(?!\2{2}))+\b)/
Run Code Online (Sandbox Code Playgroud)

试试看:

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)))
}
Run Code Online (Sandbox Code Playgroud)

将输出:

A1D3E - true
AAAA - false
AABAA - true
abccddeeff - true
abbbc - false
1234 - true
Run Code Online (Sandbox Code Playgroud)


Bry*_*ley 1

为了回应澄清,似乎并不严格要求单个正则表达式。在这种情况下,我建议您使用多个正则表达式或函数。我的猜测是,性能不是必需的,因为通常此类检查是根据用户输入完成的。用户输入验证可能需要 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)))
Run Code Online (Sandbox Code Playgroud)

我个人认为上面的内容比一个复杂的正则表达式更容易阅读。另外,添加或删除规则并不会让您必须重新实现复杂的正则表达式(因此,需要重新测试所有可能的组合)。