teclado - jquery-validar caracteres al presionar teclas
simular presionar tecla jquery (7)
Bueno, la respuesta del patricio elimina el carácter si es incorrecto, para evitar que el personaje se inserte en el campo.
$("#field").keypress(function(e) {
// Check if the value of the input is valid
if (!valid)
e.preventDefault();
});
De esta manera, la carta no llegará a textarea
Tengo un campo de texto de formulario en el que quiero permitir solo números y letras. (Es decir, no # $ !, etc. ...) ¿Hay alguna manera de arrojar un error y evitar que la pulsación de tecla emita realmente algo si el usuario intenta usar cualquier caracter que no sean números y letras? He estado tratando de encontrar un complemento, pero realmente no he encontrado nada que lo haga ...
Descubrí que la combinación de validación en keypress y keyup brinda los mejores resultados. La clave es imprescindible si desea manejar el texto copiado. También es una trampa en caso de problemas de navegador cruzado que permiten valores no numéricos en su cuadro de texto.
$("#ZipCode").keypress(function (event) {
var key = event.which || event.keyCode; //use event.which if it''s truthy, and default to keyCode otherwise
// Allow: backspace, delete, tab, and enter
var controlKeys = [8, 9, 13];
//for mozilla these are arrow keys
if ($.browser.mozilla) controlKeys = controlKeys.concat([37, 38, 39, 40]);
// Ctrl+ anything or one of the conttrolKeys is valid
var isControlKey = event.ctrlKey || controlKeys.join(",").match(new RegExp(key));
if (isControlKey) {return;}
// stop current key press if it''s not a number
if (!(48 <= key && key <= 57)) {
event.preventDefault();
return;
}
});
$(''#ZipCode'').keyup(function () {
//to allow decimals,use/[^0-9/.]/g
var regex = new RegExp(/[^0-9]/g);
var containsNonNumeric = this.value.match(regex);
if (containsNonNumeric)
this.value = this.value.replace(regex, '''');
});
La extensión de jquery anterior (ForceAlphaNumericOnly) es buena, pero aún permite el paso de los siguientes caracteres !@#$%^&*()
En mi Mac, cuando presiona la tecla Mayús (código clave 16
) y luego 1 , !
ingresa !
pero el código clave es 49
, el código clave para 1
.
Puedes probar esta extensión:
jQuery.fn.ForceAlphaNumericOnly =
function()
{
return this.each(function()
{
$(this).keydown(function(e)
{
var key = e.charCode || e.keyCode || 0;
// allow backspace, tab, delete, arrows, letters, numbers and keypad numbers ONLY
return (
key == 8 ||
key == 9 ||
key == 46 ||
(key >= 37 && key <= 40) ||
(key >= 48 && key <= 57) ||
(key >= 65 && key <= 90) ||
(key >= 96 && key <= 105));
})
})
};
Uso:
$("#yourInput").ForceAlphaNumericOnly();
$(''#yourfield'').keydown(function(e) {
// Check e.keyCode and return false if you want to block the entered character.
});
$(''input'').keyup(function() {
var $th = $(this);
$th.val( $th.val().replace(/[^a-zA-Z0-9]/g, function(str) { alert(''You typed " '' + str + '' "./n/nPlease use only letters and numbers.''); return ''''; } ) );
});
EDITAR:
Aquí hay otras buenas respuestas que evitarán que se produzca la entrada.
He actualizado el mío ya que también quería mostrar un error. El reemplazo puede tomar una función en lugar de una cadena. La función se ejecuta y devuelve un valor de reemplazo. He agregado una alert
para mostrar el error.
$(document).ready(function() {
$(''.ipFilter'').keydown((e) => {
if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
(e.keyCode === 65 && (e.ctrlKey === true || e.metaKey === true) ||
e.keyCode === 67 && (e.ctrlKey === true || e.metaKey === true) ||
e.keyCode === 86 && (e.ctrlKey === true || e.metaKey === true) ||
e.keyCode === 82 && (e.ctrlKey === true || e.metaKey === true)) ||
(e.keyCode >= 35 && e.keyCode <= 40 )) {
return;
}
if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
e.preventDefault();
}
});
});