jQuery – valider les caractères sur la touche?

Je souhaite autoriser uniquement la saisie de chiffres et de lettres dans un champ de texte de formulaire. essaie d’utiliser n’importe quel caractère autre que des chiffres et des lettres? J’ai essayé de trouver un plugin, mais je n’ai rien trouvé qui fasse ça …

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

MODIFIER:

Il existe quelques autres bonnes réponses ici qui empêcheront la participation.

J’ai mis à jour le mien puisque vous vouliez aussi montrer une erreur. Le remplacement peut prendre une fonction au lieu d’une chaîne. La fonction s’exécute et renvoie une valeur de remplacement. J’ai ajouté une alert pour afficher l’erreur.

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

Eh bien, la réponse de Pasortingck supprime le caractère s’il est erroné, pour empêcher le caractère d’être inséré dans le champ

 $("#field").keypress(function(e) { // Check if the value of the input is valid if (!valid) e.preventDefault(); }); 

De cette façon, la lettre ne viendra pas à textarea

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

J’ai constaté que la combinaison de la validation sur les touches et keyup donne les meilleurs résultats. La touche haut est indispensable si vous souhaitez gérer le texte collé. C’est également un piège pour tous les problèmes de navigateur qui autorisent des valeurs non numériques dans votre zone de texte.

  $("#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, ''); }); 

Vous pouvez essayer cette extension:

 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)); }) }) }; 

Utilisation:

 $("#yourInput").ForceAlphaNumericOnly(); 

L’extension jquery ci-dessus (ForceAlphaNumericOnly) est bonne mais permet toujours les caractères suivants via !@#$%^&*()

Sur mon Mac, lorsque vous appuyez sur la touche Maj (code clé 16 ) puis sur 1 , vous entrez ! mais le code clé est 49 , le code clé pour 1 .

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