正则校验数字和字母递增或递减的js代码实现(枚举)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LinBilin_/article/details/82624323

网友需求:

1.不允许出现3位或3位以上同样或连续数字(递增或递减);
2.不允许出现3位或3位以上同样或连续字母(递增或递减);
3.不允许出现3位或3位以上同一个特殊符号;

实现:javascript(正则实现)

/**
codeType:0数字,1字母
**/
function createRegexStr(codeType){
var result='';
var items=[];
var i=(codeType===0)?0:65;
var max=(codeType===0)?8:89;
for(;i<max;i++){
    var item=[];
     item.push((codeType===0)?i:String.fromCharCode(i));
    for(var j=1;j<=2;j++){
        item.push((codeType===0)?(i+j):(String.fromCharCode(i+j)));
    }
    items.push(item.join(''));
    items.push(item.reverse().join(''));
}
result+=items.join("|");
result="(?:"+result+")";
return result;
}
 
function check(str){
    var regexStr="^(?!.*([!-~])\\1{2,})";
    regexStr+="(?!.*"+createRegexStr(0)+")";
    regexStr+="(?!.*"+createRegexStr(1)+")";
    regexStr+=".+$";
    var regex=new RegExp(regexStr,"i");
    return regex.test(str);
}

生成的正则:

/^(?!.*([!-~])\1{2,})(?!.*(?:012|210|123|321|234|432|345|543|456|654|567|765|678|876|789|987))(?!.*(?:ABC|CBA|BCD|DCB|CDE|EDC|DEF|FED|EFG|GFE|FGH|HGF|GHI|IHG|HIJ|JIH|IJK|KJI|JKL|LKJ|KLM|MLK|LMN|NML|MNO|ONM|NOP|PON|OPQ|QPO|PQR|RQP|QRS|SRQ|RST|TSR|STU|UTS|TUV|VUT|UVW|WVU|VWX|XWV|WXY|YXW|XYZ|ZYX)).+$/i

实现思路:枚举。主要是正则对于匹配递增和递减数字和字母不好处理,可以考虑其他高效率的方法。

猜你喜欢

转载自blog.csdn.net/LinBilin_/article/details/82624323