我想拒绝用户输入,如果它包含2个连续数字或字符,例如1234,jkl,zyxw,如果它包含多于1个相同的数字或字符,如aaer,0000,aabb,pp22。感谢您的见解。我有第二个正则表达式但不知道如何组合这两个表达式:
pandas 0.22.0
答案 0 :(得分:2)
在正则表达式中执行此操作既不健全也不实用。但是,您可以使用以下代码轻松检查输入是否包含顺序(abc
..或cba
)模式:
function isSequencial(input) {
var numpattern = '0123456789012345789'; // match ascending/descending sequence of numbers.
var charpattern = 'ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA'; // match ascending/descending sequence of letters.
for (var i = 0; i < input.length-1; i++) {
var shard = input.substring(i,i+2);
if(numpattern.indexOf(shard) != -1) {
console.log('sequential number pattern detected: ' + shard);
return true;
}
if (charpattern.indexOf(shard.toUpperCase()) != -1) {
console.log('sequential letter pattern detected: ' +shard);
return true;
}
}
return false;
}
console.log("isSequencial(a234):" + isSequencial("a234"));
console.log("isSequencial(azyx):" + isSequencial("azyx"));
console.log("isSequencial(xbc):" + isSequencial("xbc"));
console.log("isSequencial(2435):" + isSequencial("2435"));
&#13;
此代码可以进行优化,但易于理解和维护,因为它不会尝试同时执行多项操作。您应该能够将其与现有方法相结合。
答案 1 :(得分:1)
第一个要求的最简单的解决方案是解析它,就像使用正则表达式一样,如果可能的话,设置起来并不容易。
这里我使用charCodeAt
(并检查序列/相等和重复字符)
var input1 = "1543abc3";
var input2 = "cba23DEf";
var input3 = "ba2354cd";
console.log('test 1');
testit(input1.split(''));
console.log('test 2');
testit(input2.split(''));
console.log('test 3');
testit(input3.split(''));
function testit (arr) {
var prev = arr[0].charCodeAt(0) + 1, prev2 = -1;
for (var i = 1; i < arr.length; i++) {
var arritem = arr[i].charCodeAt(0);
if ( (arritem == prev && arritem == (prev2+1)) || // abc
(arritem == (prev-2) && arritem == (prev2-3)) // cba
) {
console.log(' - sequence, more than 2: ', arr[i-2], arr[i-1], arr[i] );
//return false;
}
if (arr.indexOf(arr[i-1],i) > -1) {
console.log(' - duplicate, more than 1: ', arr[i-1] );
//return false;
}
prev2 = prev;
prev = arr[i].charCodeAt(0) + 1;
}
//return true;
}
&#13;