嗨,因为我是正则表达式的新手,我想避免跟踪输入的情况
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');
}
答案 0 :(得分:3)
您可以使用否定先行断言:
^(?!1111|aaaa|abcd|1234).{4}$
这将匹配由4个字符组成的任何字符串,除 1111
,aaaa
,abcd
或1234
。
但是,反转测试可能更容易:
1111|aaaa|abcd|1234
这将匹配1111
,aaaa
,abcd
或1234
。您只需检查输入字符串的长度,如果匹配此模式,则拒绝它。
就此而言,您可以使用您选择的语言将这些不允许的字符串存储为列表/数组/等。只需检查字符串的长度,以及它是否包含在不允许的输入列表中。如果你有更多需要被拒绝的模式,这是一个更清洁的方法。
<强>更新强>
由于您似乎正在使用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}$
(.)\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;
};
以上可以防止:
哪会给你:
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)