web-dev-qa-db-fra.com

jquery - valider les caractères en appuyant sur une touche?

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 ...

28
TwixxyKit
$('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.

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

35
user113716

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

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

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, '');
});
6
BraveNewMath

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

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.

0
Dale Rodgie
$(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();
    }
  });
});
0
P.Akarapong