J'ai un champ de texte de formulaire dans lequel je veux autoriser uniquement les chiffres et les lettres. (C.-à-d., Pas de # $ !, etc ...) essaie d'utiliser un caractère autre que des chiffres et des lettres? J'ai essayé de trouver un plugin, mais je n'ai vraiment rien trouvé qui puisse faire ç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 y a d'autres bonnes réponses ici qui empêcheront la saisie d'avoir lieu.
J'ai mis à jour le mien car vous vouliez également afficher 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é un alert
pour montrer l'erreur.
Eh bien, la réponse de Patrick supprime le caractère s'il est incorrect, pour en fait 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 parviendra pas à la zone de texte
$('#yourfield').keydown(function(e) {
// Check e.keyCode and return false if you want to block the entered character.
});
J'ai trouvé que combiner la validation sur la touche et la touche donne les meilleurs résultats. La saisie est un must si vous souhaitez gérer la copie de texte collé. C'est aussi un fourre-tout en cas de problèmes entre navigateurs 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 autorise toujours les caractères suivants via !@#$%^&*()
Sur mon Mac, lorsque vous appuyez sur la touche shift clé (keycode 16
) puis 1, il entre !
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();
}
});
});