简体   繁体   English

要检查的正则表达式-不超过2个连续数字或字符,并且不超过1个相同数字或字符

[英]Regular Expression to check- No more than 2 sequential numbers or characters and No more than 1 same numbers or characters-Javascript

I want to reject user input if it contains 2 sequential numbers or characters ,for example 1234,jkl, zyxw and if it contains more than 1 same numbers or characters like aaer,0000,aabb,pp22. 我要拒绝用户输入,如果它包含2个连续数字或字符,例如1234,jkl,zyxw,并且包含多个1个相同数字或字符,例如aaer,0000,aabb,pp22。 Thank you for insights. 感谢您的见解。 I have regex for the second one but dont know how to combine the two expressions: 我有第二个正则表达式,但不知道如何结合两个表达式:

"([a-zA-Z0-9])\\1{1,}"

Doing this in regex is neither sound nor practical. 在正则表达式中这样做既不合理也不可行。 However, you can easily check if your input contains a sequential ( abc .. or cba ) pattern using code like that: 但是,您可以使用以下代码轻松检查您的输入是否包含顺序( 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")); 

This code can be optimized but is easy to understand and maintain since it does not try to do multiple things at once. 该代码可以进行优化,但易于理解和维护,因为它不会立即尝试执行多项操作。 You should be able to combine this with your existing approach. 您应该能够将此与现有方法结合起来。

The simplest solution for your first requirement would be to parse it, as with a regex it will be not that easy to set up, if at all possible. 对于您的第一个要求,最简单的解决方案是解析它,因为使用正则表达式,如果可能的话,设置起来并不容易。

Here I used charCodeAt (and check for both sequence/equal and duplicates characters) 在这里,我使用了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; } 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM