JS - 如何验证字符串是否为数字

时间:2018-05-26 16:23:02

标签: javascript

我尝试验证各种输入字符串。因此我尝试使用正则表达式。不幸的是,所有的否定案例都与真实相符。如何确定正则表达式必须匹配整个字符串?

const regex = /(^([0-9]+(.||,)+[0-9]?)$)||(^([0-9]+)$)||(^(.||,)+[0-9]+$)/;

const testSetPositiv = ["34", "45.45", ".7867", "3434,34", ",7834", "546.", "45546,", "0"]

const testSetNegativ = ["wegrger", "3443,34erf", "3443.34erf", ",", ".", "4525tg", "1,211.23", "1.211,23"]


testSetPositiv.forEach(function(value) {
  console.log(regex.test(value));
  //should always return true
})
console.log("----------------");

testSetNegativ.forEach(function(value) {
  console.log(regex.test(value));
  //should always return false
})

我也尝试使用parseFloat(...),但它接受例如"5.45abc"

const testSetPositiv = ["34", "45.45", ".7867", "3434,34", ",7834", "546.", "45546,", "0"]

const testSetNegativ = ["wegrger", "3443,34erf", "3443.34erf", ",", ".", "4525tg", "1,211.23", "1.211,23"]


testSetPositiv.forEach(function(value) {
  console.log(parseFloat(value) >= -Number.MAX_VALUE)
  //should always return true

})
console.log("----------------");

testSetNegativ.forEach(function(value) {
  console.log(parseFloat(value) >= -Number.MAX_VALUE)

  //should always return false
})

5 个答案:

答案 0 :(得分:1)

一个简单的regex解决方案:

const regex = /^(\d*[.,]?\d+|\d+[.,]?\d*)$/;

const testSetPositiv = ["34", "45.45", ".7867", "3434,34", ",7834", "546.", "45546,", "0"]

const testSetNegativ = ["wegrger", "3443,34erf", "3443.34erf", ",", ".", "4525tg", "1,211.23", "1.211,23"]



testSetPositiv.forEach(function(value) {
  console.log(regex.test(value));
  //should always return true
})
console.log("----------------");

testSetNegativ.forEach(function(value) {
  console.log(regex.test(value));
  //should always return false
})

答案 1 :(得分:0)

即使字符串包含字母,

parseIntparseFloat也可以返回数字,请检查代码段:



const testSetNegativ = ["wegrger", "3443,34erf", "3443.34erf", ",", ".", "4525tg", "1,211.23", "1.211,23"];
testSetNegativ.forEach(function(value) {
  console.log(parseFloat(value));
})




我建议您使用:

  • .replace(',', '.')用正确的JavaScript小数点分隔符替换逗号(在欧洲用作小数点分隔符),
  • 一元运算符+可轻松转换为数字。 (如果不是数字,它将返回NaN



const testSetPositiv = ["34", "45.45", ".7867", "3434,34", ",7834", "546.", "45546,", "0"]
const testSetNegativ = ["wegrger", "3443,34erf", "3443.34erf", ",", ".", "4525tg", "1,211.23", "1.211,23"];

testSetPositiv.forEach(function(value) {
  console.log(+(value.replace(',', '.')) >= -Number.MAX_VALUE)
  //should always return true
})
console.log("----------------");
testSetNegativ.forEach(function(value) {
  console.log(+(value.replace(',', '.')) >= -Number.MAX_VALUE)
  //should always return false
})




希望它有所帮助。

答案 2 :(得分:0)

您可以使用Number类来验证字符串是否为有效数字。如果它不是有效数字,则会返回NaN

示例:

>Number(".23232")
0.23232
>Number(".23232abc")
NaN

答案 3 :(得分:0)

使用isNaN,(旁注“45546,”不应该是数字)

        const testsetMixed = [34, 45.45, ".7867", "wegrger", "3443,34erf", "546.", "45546,", "0"]


    testsetMixed.forEach(function(value){
       if( isNaN(value)) {
         console.log('not number');
       } else {
         console.log('number');
       }

    })

答案 4 :(得分:0)

如果输入字符串不是数字

,可以使用isNan()返回true