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

时间:2015-10-08 02:53:56

标签: javascript regex algorithm

如果字符串包含除数字之外的任何字符或逗号将其与其他字符分开,则该函数应返回"无效输入",如果它们是所有数字,则应输出" ;干得好"

a,4,3,@ ="输入无效" ...

1,4,6,5 ="出色的工作" < ===从函数返回

我试图了解正则表达式,但如果你能用其他方法做到这一点就行了。我对你如何解决它感兴趣。我无法在网上找到答案。我搜索了。我知道d(正则表达式)适用于数字,但我现在还不知道如何应用此案例。

7 个答案:

答案 0 :(得分:2)

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

/^(\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'));
});

这假设数字可以包含任意数字,并且只允许数字之间使用逗号;不是在开始,结束或连续。

答案 1 :(得分:1)

您可以使用String.split(char)将字符串拆分为字符上的数组,例如:

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

然后,您可以使用正则表达式来检查字符是否为要验证的数字和减速器。

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);

应该给你一个布尔值,你可以映射到你想要的输出字符串。减少工作类似于一个循环,它一次传递一个累积值和数组的每个元素,其中的初始值如此处所示',真实);'所以只要正则表达式返回true,我们就会继续返回相同的acc值,但是如果我们得到一个无效的正则表达式,我们将累加器切换为false。请注意,因为我们不会更改有效输入上的累加器值,所以我们不必担心它会突然重新回到“有效”状态。

答案 2 :(得分:1)

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

{{1}}

答案 3 :(得分:1)

有用的链接:

Check whether an input string contains number

Check if string contains only digits

我把它扔在一起,希望它有所帮助! 这是一个有效的功能,就像你问的那样。

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循环'功能!

function isOnlyNumsAndCommas(str) {
  if (str.match(/[^\d|,]/) === null) {
    return('great job');
  } else {
    return('invalid input');
  }
}

alert(isOnlyNumsAndCommas("a,4,3,@"));

答案 4 :(得分:0)

&#13;
&#13;
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"));
&#13;
&#13;
&#13;

答案 5 :(得分:0)

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

尝试:

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

答案 6 :(得分:0)

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,@"))