javascript - 正则表达式检查具有一系列模式的数字

标签 javascript regex validation numbers

我有一个条件,我需要使用 javascript 省略具有以下模式的一系列数字。

如果是4位数字

  1. 只有数字和长度应该是 4
  2. 至少 3 个不同的数字(例如:不允许的数字:1113、4443)
  3. 在升序和降序序列的情况下都没有 3 个连续数字(例如:不允许的数字:1231、4321)

如果是5-6位数字

  1. 只有数字和长度应该是 5-6
  2. 至少 4 个不同的数字(例如:不允许的数字:11113、44443)
  3. 在升序和降序系列的情况下都没有 3 个连续数字(例如:不允许的数字:12341、43211)

据我所知,你不能检查升序和降序数字,你只能听他们喜欢

如果是4位

^[0-9]{4}$ AND NOT IN
(?:012|210|123|321|234|432|345|543|456|654|567|765|678|876|789|987|111|222|333|444)

如果是5-6位

^[0-9]{5,6}$ AND NOT IN
(?:0123|3210|1234|4321|2345|5432|3456|6543|4567|7654|5678|8765|6789|9876|1111|2222|3333|4444|5555|6666)

我不知道如何在正则表达式中填写“AND NOT IN”。 有没有更好的办法?

最佳答案

这种事情对于正则表达式来说似乎太复杂了,因为即使你会写它,如果没有一堆注释你能理解吗?

相反,尝试将其分解:

// assuming var number as string;
var i, l = number.length, prev = -999, dist, prevdist = 0,
    digits = [0,0,0,0,0,0,0,0,0,0], dcnt = 0;
main:
switch(l) {
case 4:
case 5:
case 6:
    for( i=0; i<l; i++) {
        digits[number[i]]++;
        dist = prev-number[i];
        if( prevdist == dist && Math.abs(dist) == 1) {
            alert("Three consecutive digits ("+number.substr(i-2,3)+")");
            break main;
        }
        prev = number[i];
        prevdist = dist;
    }
    for( i=0; i<10; i++) {
        if( digits[i]) dcnt++;
    }
    if( dcnt < (l == 4 ? 3 : 4)) {
        alert("Need at least "+(l == 4 ? 3 : 4)+" distinct digits");
        break main;
    }
    alert("Valid");
    break main;
default:
    alert("Length must be between 3 and 5");
    break main;
}

关于javascript - 正则表达式检查具有一系列模式的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12749631/

相关文章:

swift - 带单引号 (') 的正则表达式不验证单引号

php - 如何在 Eclipse Juno 4.2.1 中禁用 PHP 文件的 HTML 验证?

javascript - 如何为主要浏览器(IE、firefox 和 google)的 div.onresize 事件注册或添加监听器?

javascript - 根据数据库结果填充li内容

regex - 从R中的字符串中仅提取整数

c# - 如何制作不允许阿拉伯字符的电子邮件模式

javascript - 使用 JavaScript 从 HTML5 data-* 属性获取 JSON 对象

javascript - Element.createShadowRoot() 的替代方案是什么?

javascript - 手动触发 jQuery 验证?

javascript - vee-validate 3.x 跨域验证