2012-11-05 53 views
23

thể trùng lặp:
How to prevent users from entering invalid characters inside an input fieldCho phép chỉ chữ và số giá trị

Tôi có 3 textbox trên một trang. Một trong số họ nên cho phép số, các bảng chữ cái khác và số thứ ba là số hoặc bảng chữ cái.

Vì đây là yêu cầu duy nhất, tôi không muốn sử dụng plugin xác thực hoặc bất kỳ plugin của bên thứ ba nào khác. Làm thế nào tôi có thể làm điều này bằng cách tạo ra các plugin của riêng tôi bằng cách sử dụng jQuery tinh khiết?

Đây là những gì tôi đã làm nhưng tôi nhận được một cảm giác rằng mã sẽ trở nên quá dài

$(this).keydown(function(e) 
     { 
      var key = e.charCode || e.keyCode || 0;    
      return (
       key == 8 || 
       key == 9 || 
       key == 46 || 
       (key >= 37 && key <= 40) || 
       (key >= 48 && key <= 57) || 
       (key >= 96 && key <= 105)); 
     }); 

http://jsfiddle.net/Cvus8/

bất cứ ai có thể cho tôi biết đó là si cách tốt nhất để tiếp cận vấn đề này?

+1

Regex có thể là một lựa chọn để giảm thiểu kích thước mã, nhưng bạn sẽ phải đào trong hơn. – Scorpio

+2

Đừng quên rằng người dùng cũng có thể dán văn bản từ khay nhớ tạm, cũng như sự khác biệt miền địa phương trong bộ ký tự. –

+0

thì làm thế nào để xử lý các tình huống clipboard? – KayKay

Trả lời

43

Các giải pháp tốt hơn có thể đi với các kiểm tra dựa trên biểu thức chính quy. Ví dụ dưới đây sẽ hạn chế chỉ ký tự chữ và trong lĩnh vực này với id text:

$('#text').keypress(function (e) { 
    var regex = new RegExp("^[a-zA-Z0-9]+$"); 
    var str = String.fromCharCode(!e.charCode ? e.which : e.charCode); 
    if (regex.test(str)) { 
     return true; 
    } 

    e.preventDefault(); 
    return false; 
}); 
+2

tính năng này không hoạt động đối với các ký hiệu như! @ # $%^& *() – CountMurphy

+1

@CountMurphy Cụm từ thông dụng trong câu trả lời được thiết kế để chỉ cho phép chữ hoa và chữ thường. Nó không cho phép các ký hiệu theo thiết kế. Nếu bạn cần ký hiệu, bạn có thể mở rộng cụm từ thông dụng để bao gồm các biểu tượng này. – Kami

+0

Có vẻ như tôi đã phạm sai lầm trong mã thử nghiệm của mình. Các biểu tượng được đề cập ở trên được hiển thị trong hộp văn bản của tôi. Sai lầm của tôi, giải pháp của bạn hoạt động. – CountMurphy

10

Một chữ số trong khoảng 1-9 tiếp theo không hoặc nhiều chữ số khác:

^[1-9]\d*$ 

Đảm bảo rằng một chuỗi chỉ chứa (ASCII) ký tự chữ, gạch dưới và không gian

^[\w ]+$ 

Chỉ Bảng chữ cái không có khoảng trắng hoặc _

^[a-zA-Z]+$ 

Để khớp với chuỗi chỉ chứa các ký tự đó (Hoặc một chuỗi rỗng), hãy thử

^[a-zA-Z0-9_]*$ 

Một số mẫu có thể giúp ..nhưng tôi nghĩ rằng bạn sẽ phải thay đổi chúng theo need..I bạn hy vọng nó giúp ..

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