不超过两个重复字母/数字的正则表达式
Regular expression for no more than two repeated letters/digits
我需要处理XSL文件中不超过两个相同字母/数字的正则表达式。
- 没有空间
- 不支持特殊字符
- 支持 (A-Z,A-Z,0-9(
- 需要 A-Z 之一
- 需要 0-9 之一
- 不超过 2 个相同的字母/数字(即
BBB
将失败,BB
被接受(
到目前为止我有什么
(?:[^a-zA-Z0-9]{1,2})
这个正则表达式会这样做: ^(?!.*([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]+
只允许字母和数字
编辑:从负面展望中删除了一个无关.*
(部分解法( 要匹配连续重复 3 次或更多次的相同字符,请尝试:
([a-zA-Z0-9])'1{2,}
示例匹配项(在此处和此处均测试(:AABBAA
(无匹配项(、AABBBAAA
(匹配项BBB
和AAA
项(、ABABABABABABABA
(无匹配项(、ABCCCCCCCCCC
(匹配项CCCCCCCCCC
(。
这个对你有用吗?
/('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
您可以在 2 个正则表达式中执行此操作:
-
/^(?=.*[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
:修饰符,匹配不区分大小写
作为对澄清的回应,似乎并不严格要求单个正则表达式。在这种情况下,我建议您使用多个正则表达式或函数。我的猜测是,性能不是必需的,因为通常这些类型的检查是为了响应用户输入而完成的。用户输入验证可能需要 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)))
我个人认为以上内容比一个复杂的正则表达式更容易阅读几个数量级。此外,添加或删除规则不会使您必须重新实现复杂的正则表达式(因此,需要重新测试所有可能的组合(。
- 正则表达式与数字中的第二个点匹配
- 正好包含2个大写字母和3个数字的正则表达式
- 键按下上的正则表达式 仅限制数字
- 使用正则表达式匹配长度为六个字符的字母数字字符串
- 为什么这个正则表达式不't匹配最后一个字母数字字符
- 正则表达式(JavaScript),用于创建数字必须大于x的数据验证
- 用于删除紧跟在非数字后面的零的正则表达式
- XXXXXX的正则表达式.XX格式的数字
- 将字符串拆分为数值和非数字正则表达式
- 将分数替换为分数正则表达式,将数字替换为数字正则表达式
- Javascript字母数字正则表达式不采用换行符
- Javascript仅输入数字正则表达式
- 数字正则表达式导致jshint'错误或不必要的转义'错误
- 字母数字正则表达式javascript
- JavaScript:查找匹配的数字正则表达式
- Javascript数字正则表达式测试失败-无法找出原因
- 欧洲数字正则表达式
- 如何在数字正则表达式中允许空格
- Javascript:如何检查字符串中是否存在两个数字?(正则表达式)
- 匹配字符串部分并检索非邻近数字正则表达式