Tôi không nghĩ có bất kỳ plugin nào đó có sẵn. Vấn đề là một chút khó khăn, bởi vì bạn phải cho phép người dùng gõ một số đầu vào trước khi áp dụng regex của bạn. Đó là, bạn không thể chỉ phù hợp với mỗi char khi nó được gõ, trừ khi regex của bạn chỉ định nghĩa một tập hợp các ký tự.
Để minh họa, nếu họ nhập số tiền thanh toán và bạn muốn cho phép số và số thập phân trên cơ sở một ký tự, điều gì ngăn chúng nhập 99.99.23.42492
?
Mặt khác, nếu bạn cung cấp một regex hoàn chỉnh như /\d+\.\d{2}/
, thì nó sẽ không khớp với một ký tự, bạn sẽ phải cho phép chúng nhập một số ký tự trước khi thử áp dụng regex và xóa đầu vào của họ nếu nó không khớp. Điều đó có thể gây phiền toái.
Nếu bạn thực sự muốn lọc đầu vào khi nhập, thì bạn muốn cho phép chữ số cho ký tự đầu tiên, sau đó nhập chữ số hoặc số thập phân cho ký tự tiếp theo cho đến khi nhập số thập phân. không có thêm đầu vào. Nó không phải là một bộ lọc đa năng.
Ví dụ: đây là một số mã sẽ thực hiện điều đó nhưng rất xấu.
myInput.keydown(function() {
var text = this.val
if(!/^\d/.test(text)) {
return '';
} else {
done = text.match(/^(\d+\.\d\d)/);
if (done) { return done[0]; }
last_char = text.substr(text.length-1,1);
decimal_count = text.replace(/[^\.]/g,'').length;
if (decimal_count < 1) {
if (!/[\d\.]/.test(last_char)) {
return text.substr(0,text.length-1);
}
} else if (decimal_count == 1 && last_char == '.') {
return text;
} else {
if (!/[\d]/.test(last_char)) {
return text.substr(0,text.length-1);
}
}
return text;
}
});
Và tất nhiên, điều này sẽ không hoạt động nếu chúng xảy ra khi dán vào các giá trị nhất định mà không thực hiện nhập "thực".
Có thể một số cách tiếp cận khác sẽ hoạt động tốt hơn cho bạn?Giống như làm nổi bật trường và chỉ ra cho người dùng nếu họ nhập một chữ số, không thập phân hoặc nếu họ nhập nhiều hơn một chữ số thập phân, thay vì lọc đầu vào, vì điều đó có vẻ lộn xộn.
Không xử lý dán. – mark