2010-02-13 27 views
44

Tôi muốn sử dụng câu lệnh if để chạy mã chỉ khi người dùng nhập vào một chữ cái hoặc một số.Phát hiện số hoặc chữ cái bằng jquery/javascript?

tôi có thể sử dụng

if(event.keyCode == 48 || event.keyCode == 49 || event.keyCode == 50..) { 
     // run code 
} 

Có một cách dễ dàng hơn để làm điều này? Có thể một số mã khóa không hoạt động trong tất cả các trình duyệt web?

+2

Chỉ cần thêm trong một chú thích rằng 'keycode' và 'which' đang bị phản đối và đề nghị của mình để sử dụng' KeyboardEvent.key' – SMT

Trả lời

104

Nếu bạn muốn kiểm tra một loạt các chữ cái mà bạn có thể sử dụng lớn hơn và ít hơn:

if (event.keyCode >= 48 && event.keyCode <= 57) 
    alert("input was 0-9"); 
if (event.keyCode >= 65 && event.keyCode <= 90) 
    alert("input was a-z"); 

Đối với séc năng động hơn, sử dụng một biểu thức chính quy:

var inp = String.fromCharCode(event.keyCode); 
if (/[a-zA-Z0-9-_ ]/.test(inp)) 
    alert("input was a letter, number, hyphen, underscore or space"); 

Xem số MDC documentation cho thuộc tính keyCode, giải thích sự khác biệt giữa thuộc tính đó và thuộc tính which và các sự kiện mà chúng áp dụng.

+0

làm thế nào để tôi kiểm tra một 'backspace' với kiểm tra động? – ajsie

+6

Lưu ý rằng việc này phải được thực hiện trong sự kiện 'nhấn phím 'thay vì sự kiện' phím tắt'. –

+0

+1 để có câu trả lời hay. – Mattis

8
if(event.keyCode >= 48 && event.keyCode <= 90) { 
    //the key pressed was alphanumeric 
} 
19

Trước tiên, nếu bạn đang thực hiện việc này, hãy đảm bảo sự kiện đó trong sự kiện keypress, sự kiện duy nhất mà bạn có thể nhận được thông tin đáng tin cậy về nhân vật mà người dùng đã nhập. Sau đó, tôi muốn sử dụng cách tiếp cận Andy E gợi ý:

document.onkeypress = function(evt) { 
    evt = evt || window.event; 
    var charCode = evt.which || evt.keyCode; 
    var charStr = String.fromCharCode(charCode); 
    if (/[a-z0-9]/i.test(charStr)) { 
     alert("Letter or number typed"); 
    } 
}; 

Nếu bạn muốn kiểm tra cho backspace, tôi muốn sử dụng sự kiện keydown thay và kiểm tra một keyCode 8 vì một số trình duyệt (bao gồm cả Chrome) không kích hoạt sự kiện keypress cho phím xóa lùi.

+0

Đây là câu trả lời hay hơn vì đây có lẽ là hành vi mà mọi người đang tìm kiếm. –

+0

"Nếu bạn muốn kiểm tra backspace, tôi sẽ sử dụng if (charCode == 8) {...}" --- Tôi đã thử điều này, onkeypress không kích hoạt backspace – TKoL

+0

@TKoL: Thú vị. Nó không kích hoạt trong Firefox nhưng không kích hoạt Chrome. Điều đó đã thay đổi kể từ năm 2010. –

0

số xác nhận, hoạt động tốt đối với tôi

$(document).ready(function() { 

     $(".TxtPhone").keypress(function (e) { 

      var key = e.charCode || e.keyCode || 0; 

      // only numbers 
      if (key < 48 || key > 58) { 

       return false; 
      } 

     }); 

}); 
+0

tác phẩm này, cảm ơn –

0

Bạn cũng có thể sử dụng charCode với OnKeyPress sự kiện:

if (event.charCode > 57 || event.charCode < 48) { 
    itsNotANumber(); 
} 
else { 
    itsANumber(); 
} 
0

sử dụng $.isNumeric(value); kiểu trả về là boolean

0

Chấp nhận số hoặc các chữ cái bằng javascript bởi Quy trình động bằng cách sử dụng Cụm từ thông dụng.

Thêm sự kiện onkeypress Kiểm Soát cụ

onkeypress = "javascript: return ISNUMBER (sự kiện)"

function numOnly(evt) { 
 
       evt = evt || window.event; 
 
       var charCode = evt.which || evt.keyCode; 
 
       var charStr = String.fromCharCode(charCode); 
 
       if (/[0-9]/i.test(charStr)) { 
 
        return true; 
 
       } 
 
       else 
 
        return false; 
 
      } 
 

 
    function Alphanum(evt) { 
 
       evt = evt || window.event; 
 
       var charCode = evt.which || evt.keyCode; 
 
       var charStr = String.fromCharCode(charCode); 
 
       if (/[a-z0-9]/i.test(charStr)) {     
 
        return true; 
 
       } 
 
       else 
 
        return false; 
 
      }

0

$('#phone').on('keydown', function(e) { 
 
    let key = e.charCode || e.keyCode || 0; 
 

 
    //32 = space - border of visible and non visible characters - allows us to backspace and use arrows etc 
 
    //127 - delete 
 
    if (key > 32 && (key < 48 || key > 58) && key !== 127) { 
 
     e.preventDefault(); 
 
     return false; 
 
    } 
 
});

câu trả lời được sửa đổi của @ user4584103, cho phép chúng tôi xóa ký tự và điều hướng trong hộp nhập liệu và lọc ra từng ký tự không phải số

1

Sử dụng event.key và JS hiện đại!

Không có mã số nữa. Bạn có thể kiểm tra khóa trực tiếp.

const key = event.key.toLowerCase(); 

if (key.length !== 1) { 
    return; 
} 

const isLetter = (key >= "a" && key <= "z"); 
const isNumber = (key >= "0" && key <= "9"); 
if (isLetter || isNumber) { 
    // Do something 
} 

Bạn cũng có thể sử dụng một regex đơn giản

/[a-z0-9]/i.test(event.key) 
Các vấn đề liên quan