No creo que exista tal plug-in fácilmente disponibles. El problema es un poco complicado, porque tienes que permitir que el usuario escriba alguna entrada antes de aplicar tu expresión regular. Es decir, no puede coincidir con cada carácter como se escribe, a menos que su expresión regular simplemente defina un conjunto de caracteres.
Para ilustrar, si están ingresando un monto de pago, y desea permitir números y decimales en un solo carácter, ¿qué les impide ingresar al 99.99.23.42492
?
Por otro lado, si proporciona una expresión regular completa como /\d+\.\d{2}/
, no coincidirá en absoluto con un solo carácter, deberá permitir que escriban cierta cantidad de caracteres antes de intentar aplicar la expresión regular y borrando su entrada si no coincide. Eso podría ser frustrante.
Si realmente desea filtrar la entrada mientras escriben, entonces desea permitir un dígito para el primer carácter, luego dígitos o un decimal para los caracteres siguientes hasta que se ingrese el decimal, y luego dos dígitos más, y luego no más entrada. No es un filtro de propósito general.
Por ejemplo, aquí hay un código que lo hará, pero es muy feo.
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;
}
});
Y, por supuesto, esto no funcionará si pasan a pegar ciertos valores sin hacer tipeo "real".
¿Tal vez algún otro enfoque funcionaría mejor para usted?Como resaltar el campo e indicar al usuario si ingresa un dígito que no sea un dígito, no decimal, o si ingresa más de un decimal, en lugar de filtrar la entrada en sí, porque eso parece desordenado.
No funciona pegar. – mark