Не думаю, что такой плагин доступен. Проблема немного сложна, потому что вы должны позволить пользователю вводить некоторые данные перед применением вашего регулярного выражения. То есть, вы не можете просто сопоставить каждый символ в том виде, в котором он напечатан, если ваше регулярное выражение просто не определяет набор символов.
Чтобы проиллюстрировать, что если они вводят сумму платежа и вы хотите разрешить ввод цифр и десятичных знаков только из одного символа, что мешает им ввести 99.99.23.42492
?
С другой стороны, если вы введете полное регулярное выражение, такое как /\d+\.\d{2}/
, то оно не будет совпадать вообще с одним символом, вам придется разрешить им ввести некоторое количество символов перед попыткой применить регулярное выражение и уничтожение их ввода, если они не совпадают. Это может быть неприятно.
Если вы действительно хотите фильтровать ввод по мере его ввода, то вы хотите разрешить цифру для первого символа, затем цифры или десятичное число для последующих символов, пока не будет введено десятичное число, а затем еще две цифры, а затем нет больше ввода. Это не универсальный фильтр.
Например, вот код, который это сделает, но он очень уродливый.
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;
}
});
И, конечно, это не сработает, если они вставляются в определенные значения без выполнения "реальной" типизации.
Может быть, какой-то другой подход подойдет вам лучше? Как выделение поля и указание пользователю, если они вводят нецифровое, не десятичное или если они вводят более одного десятичного знака, вместо фильтрации самого ввода, потому что это выглядит грязно.