2010-05-11 16 views
26

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 plug-in, pero realmente no he encontrado nada que haga esto ...jquery - validar caracteres al presionar teclas?

+0

Muy similar a: Esta http://stackoverflow.com/questions/995183/how-to-allow-only-numeric-0-9-in-html-inputbox-using-jquery – ThiefMaster

+0

no evitará que los caracteres no alfanuméricos se peguen con el menú contextual (clic derecho y pegar). Pruébalo en http://jsfiddle.net/ntywf –

+0

el es un complemento que lo hace muy bien: http://digitalbush.com/projects/masked-input-plugin/ – meo

Respuesta

34
$('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 ''; })); 
}); 

EDIT:

Hay algunas otras buenas respuestas aquí que evitará que la entrada tenga lugar.

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 un alert para mostrar el error.

http://jsfiddle.net/ntywf/2/

+1

+1 funciona muy bien. http://jsfiddle.net/ntywf/ Aunque tengo una * sensación *, el OP podría querer espacios también permitidos. – karim79

+0

@ karim79 - Gracias por agregar jsfiddle. Realmente debería hacer eso más a menudo. – user113716

+0

bloquea los comandos necesarios como las operaciones arriba, abajo flecha, desplazamiento y ctrl también. Cómo controlar eso –

10
$('#yourfield').keydown(function(e) { 
    // Check e.keyCode and return false if you want to block the entered character. 
}); 
11

Bueno la respuesta del Patrick elimina el carácter si está mal, en realidad evitar carácter de ser insertado en el uso 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 área de texto

0

Puede 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(); 
+0

Solo pensé en esta solución: podría haber un problema si estás insertando el texto del búfer.Si el usuario presiona ctrl + v, espera que su texto se inserte en el campo si es válido. Este enfoque podría no ser capaz de manejar esto. Sin embargo, tengo que probarlo. – Juriy

0

La extensión por encima de jQuery (ForceAlphaNumericOnly) es bueno, pero todavía permite los siguientes personajes a través de [email protected]#$%^&*()

en mi Mac, cuando se pulsa la tecla cambio (código clave 16) y luego , ingresa ! pero el código clave es 49, el código clave para 1.

5

Encontré que la combinación de validación en keypress y keyup da 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, ''); 
}); 
+1

En Chrome al pegar (ctrl-v), la tecla no parece tener ningún valor para este valor. Por lo tanto, la expresión regular nunca coincide. En Firefox observo que End, Delete, Home, Page Up y Page Down no funcionan en el campo. – peater

0
$(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(); 
    } 
    }); 
}); 
Cuestiones relacionadas