正则表达式检查 - 不超过2个连续数字或字符和不超过1个相同的数字或字符-Javascript

时间:2018-04-27 06:42:09

标签: javascript regex

我想拒绝用户输入,如果它包含2个连续数字或字符,例如1234,jkl,zyxw,如果它包含多于1个相同的数字或字符,如aaer,0000,aabb,pp22。感谢您的见解。我有第二个正则表达式但不知道如何组合这两个表达式:

pandas 0.22.0

2 个答案:

答案 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;
&#13;
&#13;

此代码可以进行优化,但易于理解和维护,因为它不会尝试同时执行多项操作。您应该能够将其与现有方法相结合。

答案 1 :(得分:1)

第一个要求的最简单的解决方案是解析它,就像使用正则表达式一样,如果可能的话,设置起来并不容易。

这里我使用charCodeAt(并检查序列/相等和重复字符)

&#13;
&#13;
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;
&#13;
&#13;