2015-05-04 61 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

相關問題