试图找出一个以逗号分隔的字符串是否只包含数字

Trying to find out if a string with it's characters separated by commas contains only digits

本文关键字:字符串 是否 数字 包含 分隔 一个以      更新时间:2023-09-26

如果字符串中包含除数字或逗号以外的任何字符,则函数应该返回"invalid input",如果它们都是数字,则应该输出"great job"

a,4,3,@ = "invalid input"…

1,4,6,5 = "great job" <===return from function

我试图了解正则表达式,但如果你可以使用另一种方法,那就好了。我对你如何解决它很感兴趣。我自己在网上也找不到答案。我搜索。我知道d (regex)是数字,但我只是不知道现在如何将其应用于这种情况。

您可以使用一个简单的正则表达式来检查字符串是否只包含逗号分隔的数字:

/^('d+,)*'d+$/.test(s)

并像这样使用:

['1,2,3','123,5,223','1@32','12','12,',',23',','].forEach(function(s) {
  document.write('<br>' + s + ' : ' + (/^('d+,)*'d+$/.test(s)? 'great job' : 'invalid input'));
});

假设数字可以有任意位数,并且数字之间只允许使用逗号;

您可以使用string .split(char)将字符串拆分为一个字符数组,例如:

'1,4,6,5'.split(',');
> [1, 4, 6, 5]

你可以使用一个正则表达式来检查这个字符是否是一个数字,并使用一个reducer来验证。

function valid(c) {
   //using regex, return true if the character is valid, false if not
   // or something like
   return !Number.isNaN(+c);
}
'1,4,6,5'.split(',').reduce(function(acc, x) {
     if valid(x) {
        return acc;
     } else {
        return false;
     }
 }, true);

应该给你一个布尔值,你可以将它映射到你想要的输出字符串。Reduce的工作方式有点像循环,它一次传递一个累积值和数组的每个元素,初始值在这里的部分'},true);',所以只要正则表达式返回true,我们就继续返回相同的acc值,但如果我们得到一个无效的正则表达式,我们将累加器切换为false。注意,因为我们没有改变有效输入的累加器值,所以我们不必担心它会突然返回到"有效"状态。

您可以使用Array.prototype.every()方法

return str.split(',').every(function(val) {
    return parseInt(val) == val; // or any of the many other ways to check if a string is a number
});

帮助链接:

检查输入字符串是否包含数字

检查字符串是否只包含数字

我把这个拼凑在一起,希望能有所帮助!这是一个工作函数,正如你所要求的。
function isOnlyNumsAndCommas(str) {
  for (var i = 2; i <= str.length + 2; i += 2) {
    var val = str.substring(i - 2, i - 1);
    var isnum = val.match(/'d+/g);
    if (!isnum) {
      return ('invalid input');
      break;
    }
  }
  return('great job');
}
alert(isOnlyNumsAndCommas("@,4,3,3"));

For非For循环函数!

function isOnlyNumsAndCommas(str) {
  if (str.match(/[^'d|,]/) === null) {
    return('great job');
  } else {
    return('invalid input');
  }
}
alert(isOnlyNumsAndCommas("a,4,3,@"));
function isValid(str){
    var res = str.split(',').every(function(item){ 
        return !isNaN(item) ? true : false;
  });
return res ? "great job" : "invalid input";
}
console.log(isValid("1,2,4,5,@"))

var hasCommaSeparatedDigits = function(str){
    var strArr = str.split(",");
    var res = strArr.length ? "Great job!" : "Invalid Input";
    for(var i in strArr){
    	var ch = strArr[i];
        if(isNaN(ch)){
            res = "Invalid Input";
            break;
        }
    }
    
    return res;
}
console.log(hasCommaSeparatedDigits("1,2,3,4"));
console.log(hasCommaSeparatedDigits("1,a,3,4"));

不需要拆分字符串,循环并检查每个部分的有效性。只需执行正则表达式检查是否存在除逗号以外的非数字(这里假设逗号可以出现在任何地方)

试题:

var str = "1,2,3,";
if(str.match(/[^'d|,]/) == null)
 alert("great job");
else
 alert("err");