检查完美整数,甚至不检查浮点数。从字符串中提取

时间:2018-06-28 06:43:24

标签: javascript

在我的应用程序中,有一种方法可以从服务器返回值。我得到的值的格式是字符串。

MESSAGE : 
 url:'xxxxxx',
 date:'xx/xx/xxxx',
 time:'xx:xx:xx',
 body:"10"

现在体内有一个整数值,但它以字符串形式出现。有可能不是字符串中的数字,而是字符串中的浮点数,字符,特殊符号等不相关的数据。

body:'157a'
body:'22/2'
body:'/45'

现在我的要求是,当我获得该值时,我必须检查以字符串形式出现的数据是否是完美的整数。不应为零,负数,浮点数或字符。

例如

以下格式符合我的要求

body:'225'
body:'147'
body:'534'

根据我的要求,以下格式不可接受

body:'0'
body:'-145'
body:'22/a'
body:'67,54'

我尝试使用parseInt()或isNan(),但我已经检查了是否可以

var data = parseInt('76,54');
console.log(data);
返回76的

。但是按照我的要求,它不应该那样。有什么方法可以检查从服务器获取的字符串中的整数。

4 个答案:

答案 0 :(得分:0)

您可以使用正则表达式来验证该值是一串十进制数字。

function isIntegerDigits(s) {
  return /^[0-9]+$/.test(s);
}

["225", "147", "534", "0", "-145", "22/a", "67,54"].forEach(c =>
  console.log(c, isIntegerDigits(c) && parseInt(c) !== 0)
);

输出

225 true
147 true
534 true
0 false
-145 false
22/a false
67,54 false

答案 1 :(得分:0)

是的,它很容易

body*1 === parseInt(body*1,10) && body > 0

对此进行检查,只有在正整数的情况下,您才会为真

答案 2 :(得分:0)

function checkNumber(x){
  console.log(!!Number(x))
}

let a = '123dx'
let b = '133'
let c = 'yx123'



checkNumber(a)//false
checkNumber(b)//true
checkNumber(c)//false

检查的安全方法是使用Number并将其显式包装,并使用双重否定!!来获取布尔值

答案 3 :(得分:0)

您这样做

if (+body && !(+body%1) && +body > 0) {
    // only positive numbers
}

这将+body将主体值转换为数字,并检查其是否!= 0 然后+body > 0检查是否为正值