Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript查找字符串中是否包含特定数量的连续数字?_Javascript_Regex - Fatal编程技术网

如何使用javascript查找字符串中是否包含特定数量的连续数字?

如何使用javascript查找字符串中是否包含特定数量的连续数字?,javascript,regex,Javascript,Regex,假设我想知道一个字符串是否包含5个或更多连续数字 var a = "ac39270982"; // False var a = "000223344998"; // False var a = "512345jj7"; // True - it contains 12345 var a = "aa456780"; // True - it contains 45678 是否有可用的正则表达式来实现这一点?它是否也能在以下情况下工作 var a = "5111213141587"; // Tru

假设我想知道一个字符串是否包含5个或更多连续数字

var a = "ac39270982"; // False
var a = "000223344998"; // False
var a = "512345jj7"; // True - it contains 12345
var a = "aa456780"; // True - it contains 45678
是否有可用的正则表达式来实现这一点?它是否也能在以下情况下工作

var a = "5111213141587"; // True
这应该是真的,因为它包含11,12,13,14,15


我不确定是否可以检查所提供的示例(一位数、两位数)以及更大的数字(三位数等)。

我花时间对您的问题进行了100%的Javascript处理。我只是简单地解析字符串中的每个字符,并进行仅限整数的比较。这不仅适用于五个连续整数,还适用于检查十分之一(10、20等)。如果愿意,还可以增加/减少比较次数

一个合理的警告:尽管这种方法如果编码为查找所有类型的数字大小,可能具有可扩展性,但您仍然会受到计算能力和比较次数的限制。这就是为什么我只提供了一位数和十分之一的代码,我让您/社区决定如何从这里扩展

如果你碰巧需要更多关于它如何工作的细节,请告诉我,我可以进一步澄清它的内部工作原理

var str = "1111122asdgas222*&^%121314151617bdjfjahdi234bdce56789";
var consecutive = 5; // Number of comparisons

// Single digits
alert("It is " + consecutiveDigits(str, consecutive) + " that " + str + " contains " + consecutive + " consecutive digits.");
// Tenths digits
alert("It is " + consecutiveDigits(str, consecutive) + " that " + str + " contains " + consecutive + " consecutive tenths.");

function consecutiveDigits(str, consecutive){
    var curr,
        prev,
        count = 0;
    for(var i = 0; i < str.length; ++i) {
        curr = parseInt(str.split('')[i]);
        if(isNumeric(curr)) {
            if(count === 0){
                ++count;
            }
            else if(prev + 1 === curr){
                ++count;
                if(count === consecutive){
                    return true;
                }
            }
            prev = curr;
        }
    }
    return false;
}

function consecutiveTenths(str, consecutive, iterations){
    var curr,
        prev,
        curr_tenth = 0,
        prev_tenth = 0,
        count = 0,
        count_tenth = 0;

    for(var i = 0; i < str.length; ++i) {
        curr = parseInt(str.split('')[i]);
        if(isNumeric(curr)) {
            ++count;
            if(count === iterations){
                curr_digit = (prev * 10) + curr;
                alert(count_digit + " " + curr_digit + " " + prev_tenth);
                if(count_digit === 0){
                    ++count_digit;
                }
                else if(curr_tenth === (prev_tenth + 1)){
                    ++count_digit;
                    if(count_digit === consecutive){
                        return true;
                    }
                }
                prev_digit = curr_digit;
                count = 0;
            }
            else {
                prev = curr;
            }
        }
        else {
            count = 0;
        }
    }
}


function isNumeric(n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
}
var str=“11111 22ASDGAS222*&^%121314151617bdjfjahdi234bdce56789”;
连续变量=5;//比较次数
//个位数
警报(“正是“+str+”包含“+连续+”连续数字“+”);
//十分之一位数
警报(“正是“+continuousedigits(str,continuoused)+”+str+“包含”+continuoused+“continuoused十分之一”);
函数连续数字(str,连续){
var curr,
前,
计数=0;
对于(变量i=0;i
您可以构建regexp来验证它是否为真,但您可能很难检索整个连续字符串。也就是说RegExp有点麻烦,但是您可以创建一个函数来创建所需的RegExp,具体取决于所需的参数。请参阅代码片段:

函数构建\u regexp(n){
var字符串=”;

对于(var i=0;i编辑:在numRegex中添加了一个代码片段并修复了错误

要回答一般情况(即任意长度数字的连续序列),可以执行以下操作:

/*在输入中查找n>1个连续递增的整数序列
* 
*如果找到序列,则返回一个对象:
*   {
*开始:,
*长度:,
*第一:
*   }
*
*否则,返回null
*/
函数查找顺序(输入,n){
var numRegex=/^(?:0 |[1-9][0-9]*)$/;
//尝试每个起始位置
对于(变量i=0;i1&&input.length){
var结果=findSequence(输入,n);
如果(结果){
$('#result').text(JSON.stringify(result,null,2));
var afterFirst=result.start+result.first.length;
var afterSeq=result.start+result.length;
$(“#突出显示”).empty()
.append($('')
.text(input.slice(0,result.start)))
.append($('')
.addClass('序列')
.append($('')
.addClass('first')
(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){4,}\d
(?:(\d)(?:0(?=(?:\1)1)|1(?=(?:\1)2)|2(?=(?:\1)3)|3(?=(?:\1)4)|4(?=(?:\1)5)|5(?=(?:\1)6)|6(?=(?:\1)7)|7(?=(?:\1)8)|8(?=(?:\1)9))|09(?=10)|19(?=20)|29(?=30)|39(?=40)|49(?=50)|59(?=60)|69(?=70)|79(?=80)|89(?=90)){4,}\d{2}
(?:(\d{2})(?:0(?=(?:\1)1)|1(?=(?:\1)2)|2(?=(?:\1)3)|3(?=(?:\1)4)|4(?=(?:\1)5)|5(?=(?:\1)6)|6(?=(?:\1)7)|7(?=(?:\1)8)|8(?=(?:\1)9))|(\d)(?:09(?=(?:\2)10)|19(?=(?:\2)20)|29(?=(?:\2)30)|39(?=(?:\2)40)|49(?=(?:\2)50)|59(?=(?:\2)60)|69(?=(?:\2)70)|79(?=(?:\2)80)|89(?=(?:\2)90))|099(?=100)|199(?=200)|299(?=300)|399(?=400)|499(?=500)|599(?=600)|699(?=700)|799(?=800)|899(?=900)){4,}\d{3}
(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){4,}\d|(?:(\d)(?:0(?=(?:\1)1)|1(?=(?:\1)2)|2(?=(?:\1)3)|3(?=(?:\1)4)|4(?=(?:\1)5)|5(?=(?:\1)6)|6(?=(?:\1)7)|7(?=(?:\1)8)|8(?=(?:\1)9))|09(?=10)|19(?=20)|29(?=30)|39(?=40)|49(?=50)|59(?=60)|69(?=70)|79(?=80)|89(?=90)){4,}\d{2}|(?:(\d{2})(?:0(?=(?:\2)1)|1(?=(?:\2)2)|2(?=(?:\2)3)|3(?=(?:\2)4)|4(?=(?:\2)5)|5(?=(?:\2)6)|6(?=(?:\2)7)|7(?=(?:\2)8)|8(?=(?:\2)9))|(\d)(?:09(?=(?:\3)10)|19(?=(?:\3)20)|29(?=(?:\3)30)|39(?=(?:\3)40)|49(?=(?:\3)50)|59(?=(?:\3)60)|69(?=(?:\3)70)|79(?=(?:\3)80)|89(?=(?:\3)90))|099(?=100)|199(?=200)|299(?=300)|399(?=400)|499(?=500)|599(?=600)|699(?=700)|799(?=800)|899(?=900)){4,}\d{3}