Я искал ответ, в котором ввод ограничивался только буквенно-цифровыми символами, но все же позволял использовать управляющие символы (например, backspace, delete, tab) и copy + paste. Ни один из предоставленных ответов, которые я пробовал, не удовлетворял всем этим требованиям, поэтому я придумал следующее, используя событие input
.
$('input').on('input', function() {
$(this).val($(this).val().replace(/[^a-z0-9]/gi, ''));
});
Edit:
Как указывалось в комментариях rinogo , фрагмент кода, приведенный выше, приводит к перемещению курсора в конец ввода при вводе текста в середине введенного текста. Я полагаю, что фрагмент кода ниже решает эту проблему.
$('input').on('input', function() {
var c = this.selectionStart,
r = /[^a-z0-9]/gi,
v = $(this).val();
if(r.test(v)) {
$(this).val(v.replace(r, ''));
c--;
}
this.setSelectionRange(c, c);
});