2015-05-04 45 views
6

基本上我有以下代码:检查一个文本框的值是一个字符串或数字在JavaScript

<input type="text" value="123" id="txtbox"> 
<script> 
var myVar = document.getElementById('txtbox').value; 

if (myVar.substring) { 
alert('string'); 
} else{ 
alert('number'); 
} 
</script> 

不管你把什么样的价值在文本框中,它会时刻警惕string。有没有办法,如果你在文本框中输入数字,它会提示number而不是字符串?谢谢。

回答

13

valueinput元件是总是的字符串。它可能是一串数字。

如果你想知道该字符串是否只包含有效数字,你必须解析它(并决定你认为一个有效的数字,并允许)。

举例来说,你会得到别人告诉你使用parseInt(myVar)或一元++myVar)或isNaN(myVar)(它的一元+做什么)或Number(myVar)(下同),

  1. parseInt只解析字符串的开头,parseInt("345foo")345

  2. parseInt时,考尔的se,只用于整数;你想要parseFloat的数字与小数部分

  3. 所有这些都将无法理解千位分隔符

  4. 所有这些都将无法理解一个小数点,是不是.(例如,在许多地方这是,有时甚至有一个空格)

  5. +myVarNumber(myVar)isNaN(myVar)和这样会把一个空字符串作为0

......那种事。所以你必须根据你想要接受的输入做一些准备。

一旦你决定什么格式(S)来处理,有与答案一打的问题在这里这样做实际的解析:

+0

为什么ParseInt而不是像@KJ的价格? –

+0

您可以使用typeof来检测js中的变量类型,然后您可以看到@ T.J。 Crowder说'alert(typeof(document.getElementById('txtbox').value));'总是返回字符串 – scraaappy

+0

你好,谢谢你。说得好。 – FewFlyBy

3

isNaN(字面意思是 “不是数字”):

var myVar = document.getElementById('txtbox').value; 

var myNum = +myVar;//as suggested by T.J. 
if (isNaN(myNum)) { 
    alert('string'); 
} else{ 
    alert('number'); 
} 
+0

这当然会失败,其中有数千个分隔符的数字,或者不是'.'的十进制分隔符(在很多语言环境中是'''等)等等。 –

+0

是的,真的@TJCrowder –

+1

另外,空字符串将评估为一个数字,不是吗? – jpw

相关问题