我需要确保我的字符串是一个数字,为此,我使用的是isNaN函数,一切正常,但是当我输入输入字段时,我遇到了问题&#39; 0e1&#39;。< / p>
我想知道检查我的字符串是否为数字并且没有科学记数法的最佳方法
答案 0 :(得分:2)
尝试使用正则表达式。这里有些例子。如果未找到匹配项,则结果为null。
alert("0e1".match(/^[-+]?[0-9]*\.?[0-9]+$/)) // null
alert("1".match(/^[-+]?[0-9]*\.?[0-9]+$/)) // 1
alert("-1".match(/^[-+]?[0-9]*\.?[0-9]+$/)) // -1
alert("1.0".match(/^[-+]?[0-9]*\.?[0-9]+$/)) // 1.0
alert("-1.5".match(/^[-+]?[0-9]*\.?[0-9]+$/)) // -1.5
alert("-1.5 4".match(/^[-+]?[0-9]*\.?[0-9]+$/)) // null
答案 1 :(得分:0)
如果您希望输入只是整数或浮点数,请改为执行此操作;
var input = '0e1';
if(!isNaN(input) && (parseInt(input, 10).toString() == input || parseFloat(input).toString() == input)){
//This is a valid number
}
答案 2 :(得分:0)
实际上,您使用的方法很好。您的代码有一个问题:
isNaN()
应为!isNaN()
。请记住,isNaN()
检查数字是否为NotaNumber。 `!isNaN()检查它是否是一个数字。
isNaN(0e1)
应该返回false,因为 0e1是一个数字!我知道,这有点令人困惑。
!isNaN(0e1)
将返回TRUE,因为!isNan()
会检查值是否为数字。
我希望这会有所帮助。
答案 3 :(得分:0)
isNaN()函数确定某个值是否为非法数字,因此如果不是数字。关于isNaN函数的好处是,所有浏览器都是suportet(ch,即ff,op,sf)。
function myFunction() {
var a = isNaN(123) + "<br>";
var b = isNaN(-1.23) + "<br>";
var c = isNaN(123-456) + "<br>";
var d = isNaN("Hello") + "<br>";
var e = isNaN("2014/11/19") + "<br>";
var result = a + b + c + d + e;
document.getElementById("test").innerHTML = result;
}
结果将是:如果值是数字返回&#34;错误&#34;如果不是数字返回&#34; True&#34;。
你可以在JsFiddle上测试它:isNaN()