繁体   English   中英

检查数字是否存在于字符串中的特定位置

[英]checking if digit exists on particular place in string

我有一个以“ TT”开头并以六位数字结尾的字符串(例如“ TT012345”,“ TT012000,TT329001)。该字符串始终采用这种格式,因此我需要检查此字符串中的最后一位是否为一定的价值。

说我有字符串“ TT032970”。 在这种情况下,我想在此字符串上进行匹配,因为最后一位为零,而前一位为7(我在寻找7)。 字符串“ TT037000”也应该是一个匹配项,但不应匹配“ TT0329701”(因为它不是七个(在字符串中的“最后一个” 7)右边的全零)。

我正在考虑使用一组嵌套的if如果使用substr()检查字符串的所有位置是否为零,并且如果它在位置n处不是零,那么我检查要查找的数字是否在位置n中存在。
我的代码是重复的,我全力以赴。

这是我到目前为止所能得到的(可以,但是仅检查字符串的最后一位和倒数第二位):

var lastDigit = [3, 7, 8], tda = document.querySelectorAll('td a'), i, j;

function checkArray(num) {
    "use strict";

    for (j = 0; j < lastDigit.length; j++) {
        if (num === lastDigit[j]) {
            return true;
        }
    }
}

for (i = 0; i < tda.length; i++) {


    if ((parseInt(tda[i].textContent.substr(8, 1), 10) === 0 && checkArray(parseInt(tda[i].textContent.substr(7, 1), 10))) || checkArray(parseInt(tda[i].textContent.substr(8, 1), 10))) {
        tda[i].style.background = "rgb(255, 144, 255)";
        amountOfTickets.push(tda[i]);
    }
}

我很肯定有一种很棒的方法来检查字符串的尾随零,并检查零之前的第一个非零数字。 但是,我真的对循环不好,只是不知道怎么做。

我非常想自己解决这个问题,但是我需要一个开端。 我宁愿对如何操作进行详细说明,而不仅仅是“答案”。
如果还有其他问题,我很乐意听取改进。

提前致谢!

要获得字符串末尾的零之前的第一个数字,可以使用正则表达式:

+string.match(/(\d)0*$/)[1]

范例1:

var string = "TT032970";
var digit = +string.match(/(\d)0*$/)[1];
console.log(digit); // logs 7

范例2:

console.log(["TT012345","TT012000","TT329001","TT032970"].map(function(string){
   return +string.match(/(\d)0*$/)[1]
})); // logs [5, 2, 1, 7] 

示范

显然,从其他答案来看,正则表达式将比循环简单得多。 而且,任何嵌套循环解决方案都将难以工作,因为您不知道必须看多少层。 (有一个零吗?两个?五个吗?)

这个正则表达式非常简单:

/(\d)0+$/

如果您对字符串进行match ,则如果不匹配则返回null (例如“ TT0329701”),如果不匹配则返回二元数组(例如“ TT037000”将返回["7000", "7"] 。)

这足以让您构建自己的解决方案。

祝你好运。

我要做的第一件事是这样的(取决于我是否正确理解了您的问题):

function lookFor(str, digit) {
    //validate input...
    if (str.length != 8) return false;
    if (str[0] != "T" && str[1] != "T") return false;

    //start at the end and move to the left as long as there are zeros
    //the first non-zero element must be our digit, else return false
    for (var i = str.length-1; i>0; --i) {
        if (str[i] !== "0") {
            return str[i] === digit;
        }
    }
}

lookFor("TT012000", "2") --> true
lookFor("TT012000", "3") --> false

但是我猜想正则表达式解决方案可能比这更紧凑。

暂无
暂无

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

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