2009-05-25 69 views

Trả lời

7

Bạn có hai cách tiếp cận này:

  1. kiểm tra các "bấm phím" sự kiện. Nếu người dùng nhấn một phím ký tự đặc biệt, hãy dừng anh ta ngay tại đó
  2. kiểm tra sự kiện "onblur": khi yếu tố đầu vào mất tiêu điểm, xác thực nội dung của nó. Nếu giá trị không hợp lệ, hãy hiển thị cảnh báo kín đáo bên cạnh hộp nhập đó.

Tôi sẽ đề xuất phương pháp thứ hai vì ít gây khó chịu hơn. Hãy nhớ cũng kiểm tra onpaste. Nếu bạn chỉ sử dụng nhấn phím Sau đó, chúng tôi có thể sao chép và dán các ký tự đặc biệt để sử dụng onpaste cũng để hạn chế dán các ký tự đặc biệt

Ngoài ra, tôi cũng sẽ xem xét lại nếu bạn thực sự muốn ngăn người dùng nhập ký tự đặc biệt. Bởi vì nhiều người có $, #, @ và * trong mật khẩu của họ.

Tôi giả định rằng điều này có thể là để ngăn chặn việc tiêm SQL; nếu vậy: tốt hơn là bạn xử lý kiểm tra phía máy chủ. Hoặc vẫn tốt hơn, thoát khỏi các giá trị và lưu trữ chúng trong cơ sở dữ liệu.

+1

Hạn chế nhập không nhất thiết phải hạn chế, có thể nhập số điện thoại, mã Zip, ngày, v.v. Nhưng +1 với lời khuyên để tăng gấp đôi kiểm tra ở phía máy chủ! – PhiLho

2

Nó sẽ giúp bạn ... giả sử bạn có biểu mẫu có dạng "formname" và hộp văn bản có tên "txt". sau đó bạn có thể sử dụng đoạn mã sau để cho phép chỉ có giá trị aphanumeric

var checkString = document.formname.txt.value; 
if (checkString != "") { 
    if (/[^A-Za-z\d]/.test(checkString)) { 
     alert("Please enter only letter and numeric characters"); 
     document.formname.txt.focus(); 
     return (false); 
    } 
} 
11

Hãy thử thế này, chức năng này cho phép tự chữ và số và không gian:

function alpha(e) { 
    var k; 
    document.all ? k = e.keyCode : k = e.which; 
    return ((k > 64 && k < 91) || (k > 96 && k < 123) || k == 8 || k == 32 || (k >= 48 && k <= 57)); 
} 

trong html của bạn:

<input type="text" name="name" onkeypress="return alpha(event)"/> 
+0

Tại sao bạn thử nghiệm 'document.all' để xác định hỗ trợ cho' e.keyCode'? Tại sao không thử 'e.keyCode' thay thế? – rvighne

+1

Về mặt kỹ thuật, bạn không cần bất kỳ dấu ngoặc đơn nhóm nào; '&&' được ưu tiên hơn '||'. – rvighne

6

Đối với ký tự đặc biệt:

var iChars = "[email protected]#$%^&*()+=-[]\\\';,./{}|\":<>?"; 

for (var i = 0; i < document.formname.fieldname.value.length; i++) { 
    if (iChars.indexOf(document.formname.fieldname.value.charAt(i)) != -1) { 
     alert ("Your username has special characters. \nThese are not allowed.\n Please remove them and try again."); 
     return false; 
    } 
} 
2

Tôi nghĩ rằng kiểm tra keypress sự kiện là không hoàn toàn phù hợp, vì tôi tin rằng người dùng có thể sao chép/dán vào các ô nhập liệu mà không kích hoạt phím bấm.

Vì vậy, onblur có lẽ hơi đáng tin cậy hơn (nhưng ít trực tiếp hơn).

Để thực sự đảm bảo ký tự mà bạn không muốn không được nhập vào hộp đầu vào (hoặc textareas, vv), tôi nghĩ rằng bạn sẽ cần phải

  1. séc keypress (nếu bạn muốn đưa ra phản hồi ngay lập tức) và
  2. cũng kiểm tra onblur,
  3. cũng như xác thực đầu vào trên máy chủ (đó là cách thực sự duy nhất để đảm bảo không có gì không mong muốn xâm nhập dữ liệu của bạn).

Các mẫu mã trong câu trả lời khác sẽ làm việc tốt để làm kiểm tra client-side (chỉ không dựa chỉ về kiểm tra keypress sự kiện), nhưng như đã được chỉ ra trong câu trả lời được chấp nhận, một máy chủ kiểm tra bên lề là thực sự cần thiết.

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