正则表达式避免使用4个字符的模式

时间:2013-09-24 14:07:16

标签: jquery regex

嗨,因为我是正则表达式的新手,我想避免跟踪输入的情况

1111 - not allowed
aaaa - not allowed
abcd - not allowed
1234 - not allowed

字符串的大小必须 仅限4个字符 任何人都可以帮助我如何为上述案例编写正则表达式。

修改

这是我在 jquery

中所做的
if(NewPasscode.match('^(?!1111|aaaa|abcd|1234).{4}$')) {
    alert('Not Ok');
    return false;
} else {
   alert('Ok');
}

4 个答案:

答案 0 :(得分:3)

您可以使用否定先行断言:

^(?!1111|aaaa|abcd|1234).{4}$

这将匹配由4个字符组成的任何字符串, 1111aaaaabcd1234

但是,反转测试可能更容易:

1111|aaaa|abcd|1234

这将匹配1111aaaaabcd1234。您只需检查输入字符串的长度,如果匹配此模式,则拒绝它。

就此而言,您可以使用您选择的语言将这些不允许的字符串存储为列表/数组/等。只需检查字符串的长度,以及它是否包含在不允许的输入列表中。如果你有更多需要被拒绝的模式,这是一个更清洁的方法。


<强>更新

由于您似乎正在使用javascript,请注意您需要指定正则表达式文字:

if(NewPasscode.match(/^(?!1111|aaaa|abcd|1234).{4}$/)) {
    alert('Ok');
    return false;
} else {
   alert('NOT Ok');
}

但如果您只是测试一场比赛,则可以使用test方法:

if(/^(?!1111|aaaa|abcd|1234).{4}$/.test(NewPasscode)) {
    alert('Ok');
    return false;
} else {
   alert('NOT Ok');
}

使用我的第二个建议:

if(NewPasscode.length == 4 && !/1111|aaaa|abcd|1234/.test(NewPasscode)) {
    alert('Ok');
    return false;
} else {
   alert('NOT Ok');
}

使用我的第三个建议:

var disallowed = ['1111','aaaa','abcd','1234'];
if(NewPasscode.length == 4 && disallowed.indexOf(NewPasscode) == -1) {
    alert('Ok');
    return false;
} else {
   alert('NOT Ok');
}

答案 1 :(得分:2)

如果您想要禁用4次相同的角色,您可以这样做:

^(?!(.)\1{3}|1234|abcd).{4}$

here on Regexr

(.)\1{3}匹配任何字符(.)并将其存储在捕获组中。 \1{3}然后检查此char是否重复3次。

对于像“1234”这样的序列,没有其他方法可以明确地列出它们,因为正则表达式不知道字符的含义。你可以检查一个字符是否相同,但如果一个字符与另一个字符串有某种关系则不能。

答案 2 :(得分:1)

假设您不想只有4种不同的可能性:

function isValidPassword(password){
  var consecutive = 1,
      lastChar = -1, o = -1;
  for (var i = 0; i < password.length; i++){
    o = password.charCodeAt(i);
    if (lastChar != -1 && (o == lastChar || o == lastChar + 1)){
      consecutive++;
    }else{
      consecutive = 1;
    }
    lastChar = o;
    if (consecutive == 4) return false;
  }
  return true;
};

以上可以防止:

  • 在字符串中找到任何4个重复的字符 例如aaaa,bbbb,0000,xxxx但 aaab,bbba,0111或xxyz
  • 在字符串中找到任意4个顺序字符 例如abcd,ghij,1234,6789但* abbcd,ghik,1245或7890

哪会给你:

Password:  Valid?:
1111       False
aaaa       False
abcd       False
1234       False
foo        True
bar        True
baz        True
password   True
1112       False
aaab       False
ghij       False
1357890    True

答案 3 :(得分:0)

这个应该符合您的需求:

^(?!1111|aaaa|abcd|1234)[a-z0-9]{4}$

Regular expression visualization

Debuggex Demo