在JavaScript中,区分0和空字符串最安全的方法是什么?
从用户输入中,我收到一个必须包含数字的字符串<代码>0和空字符串必须区别对待 我做了这个简短的案例研究在JavaScript中,区分0和空字符串最安全的方法是什么?,javascript,Javascript,从用户输入中,我收到一个必须包含数字的字符串0和空字符串必须区别对待 我做了这个简短的案例研究 0 == "" // true parseInt(0) == "" // true parseInt("") // NaN parseInt("") == "NaN" // false parseInt("") == NaN // false typeof parseInt("") // "number" 通过一点额外的研究,我制定了这个解决方案(考虑用户输入的uInput) 在Google Chr
0 == "" // true
parseInt(0) == "" // true
parseInt("") // NaN
parseInt("") == "NaN" // false
parseInt("") == NaN // false
typeof parseInt("") // "number"
通过一点额外的研究,我制定了这个解决方案(考虑用户输入的uInput
)
在Google Chrome中,它似乎能够正确区分0和空字符串
我想知道的是:
- 这是最好/最有效的解决方案吗
- 此解决方案是否与任何浏览器兼容
- 这甚至是一个解决方案吗?有什么方法可以使
成为 不是数字的东西(考虑到n
可以是任何类型的字符串)uInput
我不会问这个问题,但由于空字符串和0被视为相同的(?!),我不知道我的代码可能会暴露在哪些其他漏洞中。我会使用
===
,可以这样尝试:0===“”
/false
它们与类型转换的区别如下:这甚至是一个解决方案吗?有没有办法让n变成数字以外的东西 对<代码> PARSETIN < /COD>只在解析字符串时考虑字符串的第一个整数部分。它会忽略其余部分,因此
“12.34 oops”
仍将验证为12
我收到一个必须包含数字的字符串
您可以使用来测试:
/^\d+$/.test(uInput)
对于只包含(且至少包含一个)数字的字符串,它将生成
true
,对于其他任何字符串(非数字和空字符串),它将生成false
。创建您自己的测试,您确实喜欢对每个字符串进行一百万次尝试并检索所需的时间
对于浏览器兼容性,我想简单的操作应该是相似的。我会这样做:
var nmbr = parseInt(uInput, 10);
if (!isNaN(nmbr)) {
// Yay, valid input!
} else {
// Ups, weird input...
}
这似乎是最简单、最正确的答案,因为。试试这个:
function validate(uInput){
var regEx = /^[1-9]{1}[\d]*$/;
if (regEx.test(uInput))
alert(uInput + " is a valid number.");
else
alert(uInput + " is not valid number.");
var validNumber = parseInt(uInput);
}
因为==首先执行类型强制:
0 == false, "" == false so false == false.
您应该使用==,其中
0 === "" // false
没有类型强制。
如果(parseInt(uInput)=0&&uInput.length()==0){那么它不是0}
这将表明“3434字符串”是有效的输入,而不是:(我假设@Saturnix想要在第一个数字之后删除字符串…parseInt('3434 String'
将返回3434,这对我来说似乎很好。但是,如果您想更严格一些,可以使用Number(uInput)
与parseInt(uInput,10)
结果匹配,并检查它们之间的差异。“3434 String”成为3434对我来说没问题-我只是想确保我得到的最终值是一个数字而不是一个字符串。我没有考虑检查parseInt()的可能返回值。因为你证明了只能是2(数字或NaN),所以我同意。
0 == false, "" == false so false == false.
0 === "" // false