[英]Checking if a character (as a string) is digit with isInteger does not work
[英]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.