151 votes

Comment bloquer ou restreindre les caractères spéciaux des champs de saisie avec jquery ?

Comment bloquer la saisie de caractères spéciaux dans un champ de saisie avec jquery ?

1 votes

Utilisez un Validation de jQuery et n'autorise que les caractères alphanumériques.

154voto

Dale Points 790

Un exemple simple utilisant une expression régulière que vous pouvez modifier pour autoriser/refuser ce que vous voulez.

$('input').on('keypress', function (event) {
    var regex = new RegExp("^[a-zA-Z0-9]+$");
    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
    if (!regex.test(key)) {
       event.preventDefault();
       return false;
    }
});

62 votes

Cela ne fonctionne pas pour le texte collé et peut également empêcher l'utilisateur d'appuyer sur des touches autres que celles du texte, comme la touche d'effacement, les flèches, etc.

12 votes

Cela ne permet pas de revenir en arrière dans Firefox.

1 votes

Ne fonctionne pas pour les mots espagnols comme : avión (avion), árbol (arbre), etc.

92voto

rexmac Points 589

Je cherchais une réponse qui limite la saisie aux seuls caractères alphanumériques, tout en permettant l'utilisation des caractères de contrôle (par exemple, retour arrière, suppression, tabulation) et le copier-coller. Aucune des réponses fournies que j'ai essayées ne répondait à toutes ces exigences, et j'ai donc trouvé la réponse suivante en utilisant la fonction input événement.

$('input').on('input', function() {
  $(this).val($(this).val().replace(/[^a-z0-9]/gi, ''));
});

Edit :
Comme rinogo Comme indiqué dans les commentaires, l'extrait de code ci-dessus force le curseur à se placer à la fin de la saisie lorsque l'on tape au milieu du texte. Je pense que l'extrait de code ci-dessous résout ce problème.

$('input').on('input', function() {
  var c = this.selectionStart,
      r = /[^a-z0-9]/gi,
      v = $(this).val();
  if(r.test(v)) {
    $(this).val(v.replace(r, ''));
    c--;
  }
  this.setSelectionRange(c, c);
});

3 votes

+1 Je faisais défiler les réponses à la recherche d'une réponse comme celle-ci ou je soumettais ma propre réponse. Cette réponse filtre instantanément tous les caractères non autorisés ! Excellent !

4 votes

+1 Fonctionne pour le texte collé, n'interfère pas avec les touches d'effacement et de retour arrière de FF, et ne dépend pas de la fonction event.which o event.keycode ! J'aimerais bien avoir +10 !

4 votes

...MAIS dans Chrome et IE, lorsque vous tapez de nouveaux caractères ou que vous utilisez les touches de retour arrière et de suppression au milieu du texte d'entrée le curseur est déplacé à la fin du texte... :/ Y a-t-il une solution de contournement facile pour cela ? Je voulais tellement que cela fonctionne !

57voto

KevSheedy Points 775

Réponse courte : empêcher l'événement "keypress" :

$("input").keypress(function(e){
    var charCode = !e.charCode ? e.which : e.charCode;

    if(/* Test for special character */ )
        e.preventDefault();
})

Longue réponse : Utilisez un plugin comme jquery.alphanum

Il y a plusieurs éléments à prendre en compte pour choisir une solution :

  • Texte collé
  • Les caractères de contrôle tels que backspace ou F5 peuvent être empêchés par le code ci-dessus.
  • é, í, ä etc.
  • Arabe ou chinois...
  • Compatibilité entre navigateurs

Je pense que ce domaine est suffisamment complexe pour justifier l'utilisation d'un plugin tiers. J'ai essayé plusieurs des plugins disponibles, mais j'ai trouvé des problèmes avec chacun d'entre eux, alors je me suis lancé et j'ai écrit jquery.alphanum . Le code ressemble à ceci :

$("input").alphanum();

Ou pour un contrôle plus fin, ajoutez des paramètres :

$("#username").alphanum({
    allow      : "€$£",
    disallow   : "xyz",
    allowUpper : false
});

J'espère que cela vous aidera.

1 votes

C'est génial, mec, génial. J'ai juste dû ajouter une option pour activer/désactiver la barre oblique ('/') car elle ne fonctionnait pas lorsqu'on la mettait dans l'option allow paramètre. Mais c'est la beauté des plugins jquery, le fait que vous pouvez les modifier pour répondre à vos besoins. Merci !

0 votes

Merci Adrian. En fait, je viens d'essayer d'activer la barre oblique en utilisant la fonction allow et cela a fonctionné correctement pour moi en utilisant ce code : $('#firstName').alphanum({allow: "/"}); Pourriez-vous fournir plus d'informations ? S'il y a un bogue ou un problème avec la documentation, ce serait bien de le faire corriger. Salutations

0 votes

Bonjour KevSheedy, merci d'avoir pris le temps de tester ce produit. Désolé, je n'ai pas été assez clair. Le problème était que j'avais aussi allowOtherCharSets: false y allowCaseless: false . Ceux-ci interféraient avec les paramètres définis dans allow . De mon point de vue, je pense que les allow devrait exclure toutes les autres options (comme l'option allowOtherCharSets o allowCaseless ). Ainsi, si vous spécifiez un caractère dans le champ allow il doit être autorisé indépendamment des autres options définies dans l'objet de configuration. Il en va de même pour disallow . Mais ce n'est que mon opinion :) Merci encore ! :)

13voto

RSolberg Points 17001

Jetez un coup d'œil au plugin alphanumérique jQuery. https://github.com/KevinSheedy/jquery.alphanum

//All of these are from their demo page
//only numbers and alpha characters
$('.sample1').alphanumeric();
//only numeric
$('.sample4').numeric();
//only numeric and the .
$('.sample5').numeric({allow:"."});
//all alphanumeric except the . 1 and a
$('.sample6').alphanumeric({ichars:'.1a'});

0 votes

Y en a-t-il un pour les lettres ? Normalement, je n'utilise nan que pour les chiffres (comme un code postal ou un téléphone).

4voto

pratik1020 Points 29

Ecrivez un code javascript sur l'événement onkeypress de la zone de texte. selon les besoins, autorisez et limitez les caractères dans votre zone de texte.

function isNumberKeyWithStar(evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 42)
        return false;
    return true;
}
function isNumberKey(evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57))
        return false;
    return true;
}
function isNumberKeyForAmount(evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 46)
        return false;
    return true;
}

1 votes

Cela fonctionne si je tape manuellement. Mais je suis capable de coller les caractères spéciaux copiés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X