2015-05-04 18 views
6

Về cơ bản tôi có đoạn mã sau:Kiểm tra xem một giá trị textbox là một chuỗi hoặc một số trong javascript

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

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

Không có vấn đề gì giá trị mà bạn đặt trong hộp, nó sẽ luôn luôn cảnh báo string. Có cách nào mà nếu bạn đặt một số trong hộp văn bản nó sẽ cảnh báo number thay vì chuỗi? Cảm ơn bạn.

Trả lời

13

value trên input yếu tố là luôn một chuỗi. Nó có thể là một chuỗi các chữ số.

Nếu bạn muốn biết liệu chuỗi đó chỉ chứa số hợp lệ, bạn phải phân tích cú pháp đó (và quyết định xem bạn xem số hợp lệ là gì và cho phép điều đó).

Ví dụ, bạn sẽ nhận được mọi người nói cho bạn để sử dụng parseInt(myVar) hoặc unary + (+myVar) hoặc isNaN(myVar) (mà làm những gì các unary + không) hoặc Number(myVar) (giống nhau), nhưng:

  1. parseInt chỉ phân tích đầu của chuỗi, parseInt("345foo")345

  2. parseInt được, trong cour se, chỉ cho số nguyên; bạn muốn parseFloat cho số điện thoại với các phần phân đoạn

  3. Tất cả những sẽ không hiểu được hàng ngàn tách

  4. Tất cả những sẽ thất bại để hiểu một tách số thập phân đó không phải là . (ví dụ, trong nhiều miền địa phương nó , hoặc đôi khi thậm chí là một không gian)

  5. +myVarNumber(myVar)isNaN(myVar) và như vậy sẽ đối xử với một chuỗi rỗng như 0

... loại điều đó. Vì vậy, bạn phải làm một số chuẩn bị trên chuỗi theo những gì đầu vào bạn muốn chấp nhận.

Một khi bạn đã quyết định những gì định dạng (s) để xử lý, có một tá câu hỏi với câu trả lời ở đây về làm phân tích thực tế:

+0

tại sao ParseInt và không phải làNNN như @KJ Price? –

+0

bạn có thể sử dụng typeof để phát hiện loại biến trong js, sau đó bạn có thể xem dưới dạng @ T.J. Crowder nói rằng 'alert (typeof (document.getElementById ('txtbox'). Value));' luôn trả về chuỗi – scraaappy

+0

Xin chào, cảm ơn vì điều này. Rất tốt nói. – FewFlyBy

3

isNaN (theo nghĩa đen "là Not a Number"):

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

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

Tất nhiên, điều này sẽ thất bại đối với các số có hàng nghìn dấu tách trong chúng hoặc dấu phân tách thập phân không phải là '.' (trong nhiều ngôn ngữ là', '), v.v ... –

+0

Đúng, đúng là @TJCrowder –

+1

Ngoài ra, một e mpty chuỗi sẽ đánh giá như một số, phải không? – jpw

Các vấn đề liên quan