2009-08-13 40 views

Trả lời

83

tôi sẽ đề nghị sử dụng regexes:

var intRegex = /^\d+$/; 
var floatRegex = /^((\d+(\.\d *)?)|((\d*\.)?\d+))$/; 

var str = $('#myTextBox').val(); 
if(intRegex.test(str) || floatRegex.test(str)) { 
    alert('I am a number'); 
    ... 
} 

Hoặc với một regex duy nhất theo đề nghị @Platinum Azure của:

var numberRegex = /^[+-]?\d+(\.\d+)?([eE][+-]?\d+)?$/; 
var str = $('#myTextBox').val(); 
if(numberRegex.test(str)) { 
    alert('I am a number'); 
    ... 
}  
+0

số cũng có thể có số thập phân. 5001.10 nên được chấp nhận – Omnipresent

+0

@Omnipresent - xin lỗi, nhưng bạn đã nói isDigit, tôi sẽ chỉnh sửa. – karim79

+4

Nên chỉ định điều đó. :-) Bạn có thể sử dụng regex như thế này cho TẤT CẢ (tốt, nhiều) số có thể: '/^[+-]?\d+(\.\d+)?([eE][+-]?\d+)? $/'Điều này sẽ cho phép số thập phân, dấu hiệu và thậm chí là ký hiệu khoa học vào cuối nếu bạn muốn. Bạn có thể loại bỏ các phần khác nhau như bạn cần (biểu thức chính quy kiểu Perl của Google nếu bạn cần trợ giúp tìm ra phần nào là gì, nhưng nó nên khá trực quan). –

0

jQuery là một tập hợp các hàm JavaScript, phải không? Vì vậy, bạn có thể sử dụng hỗ trợ biểu thức chính quy của JavaScript để xác thực chuỗi. Bạn có thể đặt điều này trong một cuộc gọi lại jQuery nếu bạn thích, vì chúng chỉ lấy các hàm chức năng được nặc danh khai báo và các hàm vẫn là JavaScript.

Liên kết: http://www.regular-expressions.info/javascript.html

1

Xác thực giá trị sẽ không phải là trách nhiệm của jQuery. Bạn có thể sử dụng JavaScript thuần túy cho việc này. Hai cách đến với tâm trí của tôi là:

/^\d+$/.match(value) 
Number(value) == value 
+0

Vì ví dụ thứ hai của bạn sử dụng == và không ===, sẽ không gõ ép buộc ở phía bên phải làm cho biểu thức luôn đúng? –

+1

Không biết tại sao không ai trả lời câu trả lời này. Tôi đã sử dụng Số (giá trị) .... Hoàn hảo của nó. –

+0

@systemPAUSE Việc đề cập đến đầu vào của người dùng và "chữ số" làm cho tôi nghĩ rằng giá trị là một chuỗi và lý do cho '=='. –

69

Quên cụm từ thông dụng. JavaScript có một hàm dựng sẵn cho việc này: isNaN():

isNaN(123)   // false 
isNaN(-1.23)   // false 
isNaN(5-2)   // false 
isNaN(0)    // false 
isNaN("100")   // false 
isNaN("Hello")  // true 
isNaN("2005/12/12") // true 

Chỉ cần gọi nó như vậy:

if (isNaN($("#whatever").val())) { 
    // It isn't a number 
} else { 
    // It is a number 
} 
+0

isNaN sẽ không đảm bảo đầu vào của bạn không chứa khoảng trắng. isNaN ("42") === false –

+1

Bạn có thể cắt khoảng trắng bằng một cái gì đó như: YouValue.replace (/^\ s \ s * /, '') .replace (/ \ s \ s * $ /, ''); Thêm triển khai cắt: http://blog.stevenlevithan.com/archives/faster-trim-javascript – doomspork

+0

Cách tiếp cận thú vị, nhưng cá nhân tôi nghĩ rằng regex rõ ràng hơn so với âm kép (không phải là Số không phải là số). Mặc dù tôi muốn có khuynh hướng đưa regex vào một hàm tiện ích tốt đẹp isDigit(). –

1

Với validation jQuery plugin của bạn có thể làm một cái gì đó như thế này, giả định rằng các hình thức được gọi là dạng và giá trị để xác thực được gọi là nrInput

$("form").validate({ 
      errorElement: "div", 
      errorClass: "error-highlight", 
      onblur: true, 
      onsubmit: true, 
      focusInvalid: true, 
      rules:{ 
       'nrInput': { 
        number: true, 
        required: true 
       } 
      }); 

Điều này cũng xử lý các giá trị thập phân.

8

có cách kiểm tra đơn giản hơn nếu biến là số nguyên. bạn có thể sử dụng hàm $ .isNumeric(). ví dụ.

$.isNumeric(10);  // true 

điều này sẽ trả về true nhưng nếu bạn đặt một chuỗi thay cho số 10, bạn sẽ bị sai.

Tôi hy vọng điều này phù hợp với bạn.

2

Có thể sử dụng tập lệnh sau để kiểm tra xem giá trị có phải là số nguyên hợp lệ hay không.

function myFunction() { 
    var a = parseInt("10000000"); 
    if (!isNaN(a) && a <= 2147483647 && a >= -2147483647){ 
    alert("is integer"); 
    } else { 
    alert("not integer"); 
    } 
} 
1
String.prototype.isNumeric = function() { 
    var s = this.replace(',', '.').replace(/\s+/g, ''); 
return s == 0 || (s/s); 
} 

sử dụng

'9.1'.isNumeric() -> 1 
'0xabc'.isNumeric() -> 1 
'10,1'.isNumeric() -> 1 
'str'.isNumeric() -> NaN 
0
$(document).ready(function() { 



    $("#cust_zip").keypress(function (e) { 
     //var z = document.createUserForm.cust_mobile1.value; 
     //alert(z); 
     if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) { 

      $("#errmsgzip").html("Digits Only.").show().fadeOut(3000); 
      return false; 
     } 
    }); 
}); 
+0

Bạn cũng có thể thêm giải thích thay vì chỉ đăng mã không? – namezero

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